Изменить оттенок ImageView в массиве ImageView - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь изменить несколько ImageView оттенков цвета, содержащихся в массиве.

Все 8 ImageViews имеют идентификатор block1, block2 .... to block8 И я использую block + i с findViewById в al oop для ссылки на них.

    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, используя:

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

На этом этапе Я получаю эту ошибку:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setColorFilter(int)' on a null object reference

Любые идеи о том, почему это вызывает нулевую ссылку?

Я также могу подтвердить, что мой массив заполнен ImageViews при печати в журнале.

1 Ответ

2 голосов
/ 13 февраля 2020

Вы изменили свой для l oop, как показано ниже, потому что вы начали для l oop с 0, но нет идентификатора block0 Итак, он выдал ошибку.

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

Надеюсь, это поможет вам!

...