如何动态显示android:imageView与GradientDrawable和setImageResource?

时间:2015-09-14 12:03:01

标签: android imageview selector

我想使用特定的GradientDrawable制作ImageView并制作src = "@drawable/myImage"。当我尝试这个代码时,我得到了所有的东西,但src图像没有显示:

leftIcon = (ImageView)rowView.findViewById(R.id.left_icon);
leftIcon.setImageResource(R.drawable.arrow333);

GradientDrawable gd=new GradientDrawable();
gd.setCornerRadii(getRandomFloatArray());
gd.setStroke(5, Color.WHITE);
gd.setColor(values[position].getColor());

GradientDrawable gd_press=new GradientDrawable();
gd_press.setCornerRadii(getRandomFloatArray());
gd_press.setStroke(5, Color.BLUE);
gd_press.setColor(values[position].getColor());

StateListDrawable states = new StateListDrawable();
states.addState(new int[] {android.R.attr.state_pressed}, gd_press );
states.addState(new int[] {android.R.attr.state_focused}, gd_press);
states.addState(new int[] { }, gd);

leftIcon.setImageResource(R.drawable.arrow333);
leftIcon.setImageDrawable(states);

我的xml文件:

<ImageView
    android:id="@+id/left_icon"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:clickable="true" />

1 个答案:

答案 0 :(得分:0)

这可能是因为您在设置图像资源后正好设置了一个可绘制的states。如果您希望两个图像都可见,请将一个图像应用为ImageView背景,将其他图像应用为源:

leftIcon.setBackgroundResource(R.drawable.arrow333);
leftIcon.setImageDrawable(states);

OR

leftIcon.setBackgroundResource(states);
leftIcon.setImageDrawable(R.drawable.arrow333);