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颜色代码
根据您的代码,我认为您试图做的是:
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颜色代码
根据您的代码,我认为您试图做的是:
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不同时设置背景颜色和背景资源,应在整个案例中使用背景资源。您可以从图像文件创建按钮