首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >设置图像视图的背景颜色不起作用

设置图像视图的背景颜色不起作用
EN

Stack Overflow用户
提问于 2015-10-23 17:36:17
回答 3查看 753关注 0票数 1

我正在尝试改变点击时的ImageView背景(如Duolingo)

下面是我的代码片段:

代码语言:javascript
复制
 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    ViewGroup rootView = (ViewGroup) inflater.inflate(
            R.layout.frag_repeat, container, false);
    final int[] a1 = {0};
    final int[] a2 = {0};
    final int[] a3 = {0};
    final int[] a4 = {0};


    TypedArray itemsIcon = getResources().obtainTypedArray(R.array.nav_drawer_icons);



    ImageView wer1 = (ImageView) rootView.findViewById(R.id.imageView);

    ImageView wer2 = (ImageView) rootView.findViewById(R.id.imageView2);

    ImageView wer3 = (ImageView) rootView.findViewById(R.id.imageView23);

    ImageView wer4 = (ImageView) rootView.findViewById(R.id.imageView43);
    TextView textView1 = (TextView) rootView.findViewById(R.id.textView711);


    textView1.setText(ss[i]);
    wer1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            a1[0] = 1;
            a2[0] = 0;
            a3[0] = 0;
            a4[0] = 0;
        }
    });
    wer2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            a2[0] = 1;
            a1[0] = 0;
            a3[0] = 0;
            a4[0] = 0;
        }
    });
    wer3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            a3[0] = 1;
            a2[0] = 0;
            a1[0] = 0;
            a4[0] = 0;
        }
    });
    wer4.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            a4[0] = 1;
            a2[0] = 0;
            a3[0] = 0;
            a1[0] = 0;
        }
    });
    if(a1[0] > 0){
        wer3.setBackgroundColor(Color.parseColor("#FFFFFF"));
        wer2.setBackgroundColor(Color.parseColor("#FFFFFF"));
        wer1.setBackgroundColor(Color.parseColor("#42A5F5"));
        wer4.setBackgroundColor(Color.parseColor("#FFFFFF"));
    } else  if(a2[0] > 0){

        wer1.setBackgroundColor(Color.parseColor("#FFFFFF"));
        wer3.setBackgroundColor(Color.parseColor("#FFFFFF"));
        wer2.setBackgroundColor(Color.parseColor("#42A5F5"));
        wer4.setBackgroundColor(Color.parseColor("#FFFFFF"));
    }else  if(a3[0] > 0){
        wer1.setBackgroundColor(Color.parseColor("#FFFFFF"));
        wer2.setBackgroundColor(Color.parseColor("#FFFFFF"));
        wer3.setBackgroundColor(Color.parseColor("#42A5F5"));
        wer4.setBackgroundColor(Color.parseColor("#FFFFFF"));
    } else if(a4[0] > 0){
        wer1.setBackgroundColor(Color.parseColor("#FFFFFF"));
        wer2.setBackgroundColor(Color.parseColor("#FFFFFF"));
        wer4.setBackgroundColor(Color.parseColor("#42A5F5"));
        wer3.setBackgroundColor(Color.parseColor("#FFFFFF"));
    }
    if(i1 == 1){
        wer1.setImageResource(itemsIcon.getResourceId(i, -1));


    } else if(i1 == 2){
        wer2.setImageResource(itemsIcon.getResourceId(i, -1));

    } else if(i1 == 3){
        wer3.setImageResource(itemsIcon.getResourceId(i, -1));

    } else if(i1 == 4){
        wer4.setImageResource(itemsIcon.getResourceId(i, -1));

    }

    return rootView;
}

但是ImageView的背景并没有改变!我在RelativeLayout里面有CardViews,在RelativeLayout里面我有ImageView

EN

回答 3

Stack Overflow用户

发布于 2015-10-23 18:06:27

请共享xml文件。也许你没有在xml中设置ImageView的背景

票数 0
EN

Stack Overflow用户

发布于 2015-10-23 19:02:27

您的每个onClick侦听器都只是切换数组中的值。我怀疑您真正想要的是调用每个处理程序中的setBackground颜色代码。

从您的代码中,我认为您要做的是:

  1. 无论单击哪个按钮-将其背景颜色从白色更改为#42A5F5。
  2. 对于未单击的其他三个按钮,将背景颜色更改回白色。

我不知道您的类的名称是什么(我将其称为"YourClass")。而是让你的4个ImageViews成员变量。

代码语言:javascript
复制
class YourClass extends Fragment // I'm guessing this is the declaration, it doesn't matter - use whatever you have now
{
    ImageView _wer1;
    ImageView _wer2;
    ImageView _wer3;
    ImageView _wer4;

然后在onCreateView中,准确地将这些成员变量分配到您分配局部变量的位置:

代码语言:javascript
复制
    _wer1 = (ImageView) rootView.findViewById(R.id.imageView);
    _wer2 = (ImageView) rootView.findViewById(R.id.imageView2);
    _wer3 = (ImageView) rootView.findViewById(R.id.imageView23);
    _wer4 = (ImageView) rootView.findViewById(R.id.imageView43);

现在设置每个点击监听器来调用一个"ToggleBackgroundColors“。请注意,在每个回调处理程序中,传递给此函数的索引值不同。

代码语言:javascript
复制
_wer1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            YourClass.this.ToggleBackgroundColors(0); 
        }
    });

_wer2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            YourClass.this.ToggleBackgroundColors(1);
        }
    });

_wer3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            YourClass.this.ToggleBackgroundColors(2);
        }
    });

_wer4.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            YourClass.this.ToggleBackgroundColors(3);
        }
    });

然后实现ToggleBackgroundColors:

代码语言:javascript
复制
void ToggleBackgroundColors(int which)
{
    int highlight = Color.parseColor("#42A5F5");

    ImageView [] views = {_wer1, _wer2, _wer3, _wer4};
    for (int x = 0; x < views.length; x++)
    {
        int background = (which == x) ? highlight : Color.WHITE;
        views[x].setBackgroundColor(background);
    }
}
票数 0
EN

Stack Overflow用户

发布于 2015-10-23 21:10:13

在您的onClickListener中,您还可以在imageView上设置onClick时的colorFilter。

考虑使用onTouchListener,因为您希望imageView在您触摸按钮时改变颜色,而不是在您单击它时改变颜色。

代码语言:javascript
复制
ImageView iv = (ImageView)findViewById(resIdOfImageToFilter);
iv.setColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33299172

复制
相关文章

相似问题

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