我會分享一些我的代碼,我想你可以有一個想法,你的問題。 您還可以下載並測試自己的代碼:https://github.com/lpbaptista/Party-Monsters
這是我管理的點擊改變圖像的顏色(我只需要設置的圖片是在灰度在這個例子中)
我的手機類
公共類CategoryCell擴展的RelativeLayout實現OnClickListener {
private Category category;
private ImageView icon;
private boolean selected = true;
public CategoryCell(Context context, AttributeSet attrs) {
super(context,attrs);
LayoutInflater.from(getContext()).inflate(R.layout.category_cell, this, true);
setOnClickListener(this);
}
public void init(Category category){
this.category = category;
icon = (ImageView)findViewById(R.id.category_icon);
icon.setImageDrawable(category.getIcon(getContext()));
icon.getDrawable().clearColorFilter();
if(isSelected())
GlobalState.getInstance().addCategory(category);
}
public CategoryCell(Context context) {
this(context,null);
}
@Override
public void onClick(View v) {
setSelected(!isSelected());
}
public boolean isSelected() {
return selected;
}
public void setSelected(boolean selected) {
if(category==null)
return;
this.selected = selected;
if(!isSelected()){
ColorMatrix matrix = new ColorMatrix();
matrix.setSaturation(0);
ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix);
icon.getDrawable().setColorFilter(filter);
icon.invalidate();
GlobalState.getInstance().removeCategory(category);
}else{
GlobalState.getInstance().addCategory(category);
icon.getDrawable().clearColorFilter();
icon.invalidate();
}
}
public Category getCategory() {
return category;
}
}
在這裏,你可以看看我行類,我剛纔添加的細胞對我的看法
public class CategoryRow extends LinearLayout {
private LinearLayout root;
private Map<Category,CategoryCell> cells = new HashMap<Category, CategoryCell>();
public CategoryRow(Context context, AttributeSet attrs) {
super(context, attrs);
root = (LinearLayout) LayoutInflater.from(context).inflate(R.layout.category_row, this, true);
}
public CategoryRow(Context context) {
super(context);
root = (LinearLayout) LayoutInflater.from(context).inflate(R.layout.category_row, this, true);
}
public static CategoryRow create(ViewGroup parent, LayoutInflater inflater) {
final CategoryRow view = new CategoryRow(parent.getContext());
return view;
}
public void init(Type type, List<Category> cells) {
LinearLayout ll = (LinearLayout)root.getChildAt(0);
for(int i = 0;i<cells.size();i++) {
CategoryCell cell = ((CategoryCell)ll.getChildAt(i));
cell.init(cells.get(i));
this.cells.put(cells.get(i),cell);
}
}
public Map<Category,CategoryCell> getCells() {
return cells;
}
}
最後名單代碼:
public class CategoryList extends ListView {
private List<List<Category>> categories = new ArrayList<List<Category>>();
private Map<Category,CategoryCell> cells = new HashMap<Category, CategoryCell>();
private Type type;
public CategoryList(Context context, AttributeSet attrs) {
super(context, attrs);
setBackgroundColor(getResources().getColor(R.color.wet_asphalt));
setDivider(null);
setVerticalFadingEdgeEnabled(false);
setVerticalScrollBarEnabled(false);
setHorizontalScrollBarEnabled(false);
Utils.changeRoundedCornersColor(this, R.color.carrot,false);
if(isInEditMode())
init(Type.BAR);
}
public void init(Type type){
this.type = type;
categories.clear();
if(getAdapter()!=null)
((CategoryAdapter)getAdapter()).notifyDataSetChanged();
setAdapter(null);
categories = loadCells();
setAdapter(new CategoryAdapter());
((CategoryAdapter)getAdapter()).notifyDataSetChanged();
}
private List<List<Category>> loadCells() {
List<List<Category>> cells = new ArrayList<List<Category>>();
int rowLimitCounter = 0;
ArrayList<Category> categoryCells = null;
Category[] categories = Category.values();
for(int i = 0;i<categories.length;i++){
if(rowLimitCounter==0)
categoryCells = new ArrayList<Category>();
categoryCells.add(categories[i]);
rowLimitCounter++;
if(rowLimitCounter>3 || i == (categories.length-1)){
cells.add(categoryCells);
rowLimitCounter=0;
}
}
return cells;
}
private class CategoryAdapter extends BaseAdapter{
private final LayoutInflater inflater;
public CategoryAdapter() {
inflater = LayoutInflater.from(getContext());
}
@Override
public boolean isEnabled(int position) {
return false;
}
@Override
public int getCount() {
return categories.size();
}
@Override
public List<Category> getItem(int position) {
return categories.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
CategoryRow row = (CategoryRow) convertView;
if (row == null) {
row = CategoryRow.create(parent, inflater);
}
row.init(type, categories.get(position));
cells.putAll(row.getCells());
return row;
}
}
}
如果您對此有什麼疑問就問,我會盡力幫助