首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改ImageView数组中的ImageView色调

更改ImageView数组中的ImageView色调
EN

Stack Overflow用户
提问于 2020-02-13 05:11:19
回答 1查看 80关注 0票数 0

我试图更改数组中包含的多个ImageView颜色。

所有8 ImageViews都有block1,block2的id .对于block8,我在循环中使用block+i和findViewById来引用它们。

代码语言:javascript
复制
    private ImageView arrowUp, arrowDown;
    private ImageView[] blocks = new ImageView[8];
    private TextView result;
    private static final String TAG = "TEST";

    private int jaugeValue = 0;

        @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        arrowDown = findViewById(R.id.arrowDown);
        arrowUp = findViewById(R.id.arrowUp);
        result = findViewById(R.id.result);

        for (int i = 0; i < 8; i++) { 
            int res = getResources().getIdentifier("block"+i, "id", getPackageName()); 
            blocks[i] = (ImageView) findViewById(res);
        }

        blocks[0].setColorFilter(Color.argb(255, 255, 255, 255));


        arrowDown.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                jaugeValue--;
                changeTextValue();
            }
        });

        arrowUp.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                jaugeValue++;
                changeTextValue();
            }
        });
    }

    private void changeTextValue(){
        String displayValue = Integer.toString(jaugeValue);
        if(jaugeValue < 0)
        {
            jaugeValue = 0;
            displayValue = Integer.toString(jaugeValue);
        }
        else if(jaugeValue > 8)
        {
            jaugeValue = 8;
            displayValue = Integer.toString(jaugeValue);

        }
        result.setText(displayValue);
    }
}

在此之后,我尝试使用以下方法设置ImageView颜色之一:

代码语言:javascript
复制
blocks[0].setColorFilter(Color.argb(255, 255, 255, 255));

此时,我得到了一个错误:

代码语言:javascript
复制
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setColorFilter(int)' on a null object reference

对于为什么这会导致空引用有什么想法吗?

在日志中打印时,我还可以确认我的数组中填充了ImageViews

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-13 05:28:46

您必须像下面这样更改for循环,因为您是用0启动for循环的,但是没有 id的block0,所以会出现错误。

代码语言:javascript
复制
for (int i = 0; i < 8; i++) { 
    int res = getResources().getIdentifier("block"+(i+1), "id", getPackageName()); 
    blocks[i] = (ImageView) findViewById(res);
}

我希望这能帮到你!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60200855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档