Android 设置imageview的背景色';行不通

Android 设置imageview的背景色';行不通,android,background-image,android-imageview,Android,Background Image,Android Imageview,我试图在单击时更改ImageView背景(如Duolingo) 以下是我的代码片段: @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ViewGroup rootView = (ViewGroup) inflater.inflate( R.l

我试图在单击时更改
ImageView
背景(如Duolingo)

以下是我的代码片段:

 @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
背景不会改变!我有
cardwiews
RelativeLayout
RelativeLayout
ImageView

请共享xml文件。可能您没有在xml中为ImageView设置背景,请共享xml文件。也许您没有在xml中为ImageView设置背景,每个onClick侦听器只是在数组中切换值。我怀疑您真正想要的是在每个处理程序中调用setBackground颜色代码

根据您的代码,我认为您试图做的是:

  • 无论单击哪个按钮-将其背景色从白色更改为#42A5F5

  • 对于未单击的其他三个按钮,请将背景颜色更改回白色

  • 我不知道你们班的名字是什么(我称之为“你们班”)。但将您的4个ImageViews作为成员变量

    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中,将这些成员变量中的每一个都精确地分配到分配局部变量的位置:

        _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);
    
    现在设置每个单击侦听器以调用“ToggleBackgroundColor”。请注意,在每个回调处理程序中,传递给该函数的索引值不同

    _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);
            }
        });
    
    然后实现切换背景颜色:

    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);
        }
    }
    
    void ToggleBackgroundColors(int-which)
    {
    int highlight=Color.parseColor(#42A5F5”);
    ImageView[]视图={u-wer1,{u-wer2,{u-wer3,{u-wer4};
    对于(int x=0;x
    每个onClick侦听器只是在数组中切换值。我怀疑您真正想要的是在每个处理程序中调用setBackground颜色代码

    根据您的代码,我认为您试图做的是:

  • 无论单击哪个按钮-将其背景色从白色更改为#42A5F5

  • 对于未单击的其他三个按钮,请将背景颜色更改回白色

  • 我不知道你们班的名字是什么(我称之为“你们班”)。但将您的4个ImageViews作为成员变量

    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中,将这些成员变量中的每一个都精确地分配到分配局部变量的位置:

        _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);
    
    现在设置每个单击侦听器以调用“ToggleBackgroundColor”。请注意,在每个回调处理程序中,传递给该函数的索引值不同

    _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);
            }
        });
    
    然后实现切换背景颜色:

    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);
        }
    }
    
    void ToggleBackgroundColors(int-which)
    {
    int highlight=Color.parseColor(#42A5F5”);
    ImageView[]视图={u-wer1,{u-wer2,{u-wer3,{u-wer4};
    对于(int x=0;x
    在onClick Listener中,您还可以在onClick时在imageView上设置colorFilter

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

    ImageView iv = (ImageView)findViewById(resIdOfImageToFilter);
    iv.setColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP);
    

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

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

    ImageView iv = (ImageView)findViewById(resIdOfImageToFilter);
    iv.setColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP);
    

    解决了这个问题,但为什么(a1>0)和其他值不返回真值?你是什么意思?当a1>0时,其他视图无法正确更改背景?否a1>0即使我单击了imgView wer1(也适用于其他视图)也不会返回true不同时设置背景颜色和背景资源,应在整个案例中使用背景资源。您可以从图像文件创建按钮,但为什么(a1>0)和其他按钮没有返回true?您的意思是什么?当a1>0时,其他视图无法正确更改背景?否a1>0即使我单击了imgView wer1(也适用于其他视图)也不会返回true不同时设置背景颜色和背景资源,应在整个案例中使用背景资源。您可以从图像文件创建按钮