我有15个ImageView,我将“形状”指定为背景。我想要实现的是当我单击这些ImageView时,形状的stoke属性将从0dp变为4dp。但是当我再次点击ImageView时,它将变回0dp。我还想限制可以单击的ImageView的数量。例如,如果我已经单击了8个ImageView(将其笔画属性从0dp更改为4dp),它将不允许我再更改其他ImageView笔触属性,除非我单击一个ImageView(将删除它的2dp笔划并将将其重置为0dp)。
这是我到目前为止的代码。这允许我单击ImageViews并将其stroke属性更改为4dp。我正在谷歌搜索/ stackoverflow解决方案,但找不到一个。希望你能帮帮我。
private int[] colors = {R.color.filter_dark_blue, R.color.filter_rouge, R.color.filter_blue, R.color.filter_burgundy,
R.color.filter_turquoise, R.color.filter_navy, R.color.filter_green, R.color.filter_black,
R.color.filter_yellow, R.color.filter_charcoal, R.color.filter_orange, R.color.filter_grey,
R.color.filter_warm_red, R.color.filter_white, R.color.filter_pink};
private ImageView[] color = new ImageView[colors.length];
for (int i = 0 ; i < color.length ; i++) {
color[i] = (ImageView) findViewById(ivCirclesId[i]);
final GradientDrawable ivCircleOnClick = (GradientDrawable) color[i].getBackground();
color[i].setOnClickListener(new OnClickListener() {
public void onClick(View v) {
ivCircleOnClick.setStroke(4, Color.WHITE);
}
});
}
答案 0 :(得分:0)
这里是片段, 一些快速的想法...
1-使用setTag(Object)和getTag()设置0/1值,如点击标志
color[i] = (ImageView) findViewById(ivCirclesId[i]);
final GradientDrawable ivCircleOnClick = (GradientDrawable) color[i].getBackground();
//add this
color[i].setTag("0");//not clicked when created.
2-使用全局变量作为总点击图像的计数器,控制限制8问题,如果设置为4然后递增计数器++计数器,如果重置为0,则递减计数器 - 计数器,并更改setTag ()
public void onClick(View v) {
if(v.getTag().toString().equals("1")){
--clicked;
v.setTag("0");
ivCircleOnClick.setStroke(0, Color.WHITE);
}else{
if(clicked >= 8){
//max limit reached, nothing to do... add toast if you want ...
return;
}
++clicked;
v.setTag("1");
ivCircleOnClick.setStroke(4, Color.WHITE);
}
}