单击时更改属性 - Android

时间:2014-08-05 08:14:39

标签: android

我有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);
            }
        });
    }

1 个答案:

答案 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);
    }
}