我有9个ImageViews,当onClick每次打开一个颜色选择器时,我希望颜色选择器改变一个drawable的颜色,该颜色与当时使用的onclick相同的视图相关。我不确定如何进行此操作?我在网上搜索过例子,但似乎无法找到任何相关内容。
答案 0 :(得分:0)
如果您要从中选择一组固定的颜色,则可以使用level list drawable。在XML中,它可能看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:drawable="@drawable/color_0"
android:maxLevel="0" />
<item
android:drawable="@drawable/color_1"
android:maxLevel="1" />
. . .
</level-list>
然后,您可以将其设为ImageView的drawable,并通过调用图片视图的setImageLevel()
方法选择要显示的颜色。
修改强>
您要求以编程方式执行此操作的示例。我们假设您有以下布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:tag="0"
android:onClick="changeColor"
android:text="Change color" />
<View
android:layout_width="50dp"
android:layout_height="50dp"
android:tag="color_0" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:tag="1"
android:onClick="changeColor"
android:text="Change color" />
<View
android:layout_width="50dp"
android:layout_height="50dp"
android:tag="color_1" />
</LinearLayout>
<!-- etc. -->
</LinearLayout>
然后,在您的活动中,定义您的处理函数,如下所示:
public void changeColor(View view) {
String tag = "color_" + view.getTag();
View target = findViewById(android.R.id.content).findViewWithTag(tag);
int color = getColorFromUser();
target.setBackgroundColor(color); // or whatever you want to do
}
有人可能希望在此过程中包含一些检查空标记,未查看视图,用户取消颜色选择等等。