【发布时间】:2015-11-28 18:41:29
【问题描述】:
所以我想做的是..
- 获取可绘制形状(xml 文件)
- 获取drawable的颜色
- 使用 colors.xml 中可用的颜色更改其颜色
- 将 drawable 设置为 CardView 上的某个 ImageView(这不是问题)
这里是代码:-
colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="md_red_900">#B71C1C</color>
<color name="md_pink_900">#880E4F</color>
<color name="md_purple_900">#4A148C</color>
<color name="md_deep_purple_900">#311B92</color>
...
<!--15 more colors-->
</resources>
shape_template.xml(可绘制形状):-
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<solid android:color="@color/md_white_1000" />
</shape>
</item>
</selector>
MainColorPaletteAdapter.java(我想改变drawable的颜色):-
package com.danish.foveros.adapter;
import android.graphics.drawable.Drawable;
import android.media.Image;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.danish.foveros.R;
import java.util.ArrayList;
import java.util.List;
public class MainColorPaletteAdapter extends RecyclerView.Adapter<MainColorPaletteAdapter.ViewHolder> {
List<MainColorPaletteGetSet> mItems;
String[] colorName;
int[] colorThumbnail;
int[] allMaterialColor900;
int[] colorNameBackgroundColor;
public MainColorPaletteAdapter() {
super();
mItems = new ArrayList<MainColorPaletteGetSet>();
MainColorPaletteGetSet color;
colorName = new String[]{"Amber", "Brown", "Cyan", "Teal"};
colorThumbnail = new int[]{R.drawable.amber, R.drawable.brown,
R.drawable.cyan, R.drawable.teal};
colorNameBackgroundColor = new int[]{R.color.md_amber_900, R.color.md_brown_900,
R.color.md_cyan_900, R.color.md_teal_900};
for (int i = 0; i < colorName.length; i++) {
color = new MainColorPaletteGetSet();
color.setColorName(colorName[i]);
color.setColorThumbnail(colorThumbnail[i]);
color.setColorNameBackgroundColor(colorNameBackgroundColor[i]);
mItems.add(color);
}
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
View v = LayoutInflater
.from(viewGroup.getContext())
.inflate(R.layout.fragment_home_data, viewGroup, false);
ViewHolder viewHolder = new ViewHolder(v);
return viewHolder;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
MainColorPaletteGetSet color = mItems.get(position);
holder.colorThumbnail.setImageResource(color.getColorThumbnail());
holder.colorName.setText(color.getColorName());
holder.colorName.setBackgroundColor(color.getColorNameBackgroundColor());
}
@Override
public int getItemCount() {
return mItems.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
public ImageView colorThumbnail;
public TextView colorName;
public ViewHolder(View itemView) {
super(itemView);
colorThumbnail = (ImageView) itemView.findViewById(R.id.colorThumbnail);
colorName = (TextView) itemView.findViewById(R.id.colorName);
}
}
}
我尝试了很多方法,但他们说要通过 findViewById() 获取 View 的可绘制或背景颜色,但这对我不起作用。
正如您所见,可绘制形状是一个非常简单的形状,因此它可能并不难做到。
我想改为创建 19 个可绘制的 xml 文件,我可以获得一个可绘制的更改它的颜色,将其用于第一个 cardview 更改它的颜色并将其用于第二个 cardview 等等。
如果需要,请询问更多信息。
感谢任何帮助。谢谢。
【问题讨论】:
-
ImageView.setImageDrawable 和 Drawable.setColorFilter 是你需要的
-
好的,我会试试这个,如果它有效,会告诉你。