android - 更改 ImageView 数组中的 ImageView 色调
问题描述
我正在尝试更改ImageView
数组中包含的多种色调颜色。
所有 8ImageViews
的 id 都是 block1,block2 .... 到 block8 我findViewById
在循环中使用 block+i 来引用它们。
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
在日志中打印时,我还可以确认我的数组已填充。
解决方案
您已经像下面这样更改了 for 循环,因为您从 0 开始 for 循环,但没有 block0的 id 所以,它给出了错误。
for (int i = 0; i < 8; i++) {
int res = getResources().getIdentifier("block"+(i+1), "id", getPackageName());
blocks[i] = (ImageView) findViewById(res);
}
我希望这可以帮助你!
推荐阅读
- css - 打字时自动格式化不起作用,我已经安装了一些扩展
- sql - SQLite 对 1 个 FK 的多个约束
- here-api - HERE 地图:使用 MapBox/Maplibre 进行矢量平铺渲染的更多样式
- mongodb - Mongodb聚合多个集合
- c# - Azure 事件中心 - 如何使用官方 SDK 并行使用事件?
- javascript - 使用 Google Apps 脚本生成 JSON Web 令牌 (RS256) 以访问 DocuSign
- javascript - ChartJs 不显示行项目图例
- single-sign-on - SAML 重定向请求应该从注册域发起?
- excel - 动态个人理财功能 CountIfs 和 Sequence
- flutter - 使用 path_provider 在颤振中的路径目录