#android #gridview
#Android #gridview
Вопрос:
Я провел некоторое исследование, чтобы сделать это. я хочу, чтобы у меня были GridView
элементы с разными цветами фона и закругленными углами. когда пользователь нажимает на любой элемент, в центре элемента сетки отображается значок галочки и белая рамка. также пользователь может выбирать только по одному за раз, что означает, что если они нажимают на другой элемент, отметка и граница должны быть скрыты для текущего элемента.
Это то, что я пробовал до сих пор:
MianActivity:
//somecode
setContentView(R.layout.activity_main);
final GridView gridview = (GridView) findViewById(R.id.gridview);
gridview.setAdapter(new ImageAdapter(this));
ImageAdapter.java
public class ImageAdapter extends BaseAdapter {
private Context mContext;
// Constructor
public ImageAdapter(Context c) {
mContext = c;
}
public int getCount() {
return mThumbIds.length;
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
// create a new ImageView for each item referenced by the Adapter
public View getView(int position, View convertView, ViewGroup parent) {
final MarkableImageView imageView;
if (convertView == null) {
imageView = new MarkableImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(200, 200));
imageView.setPadding(20, 20, 20, 20);
}
else
{
imageView = (MarkableImageView) convertView;
}
//setting rounded corners on every item
imageView.setBackgroundResource(R.drawable.bg);
final GradientDrawable drawable = (GradientDrawable) imageView.getBackground();
//setting bacground colour every item based on array
drawable.setColor(Color.parseColor(mThumbIds[position]));
//tick mark and border
imageView.setChecked(true);
return imageView;
}
// Keep all Background Colors in array
public String[] mThumbIds = {"#9e9d25","#9c26b0","#c62828","#01bcd4","#4e342e","#ffeb3b","#9c26b0","#2f7d32","#ffeb3b","#ff5722","#673ab7"
};
public class MarkableImageView extends ImageView {
private boolean checked = true;
public MarkableImageView(Context context) {
super(context);
}
public MarkableImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MarkableImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void setChecked(boolean checked) {
this.checked = checked;
invalidate();
}
public boolean isChecked() {
return checked;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if(checked) {
Bitmap check = BitmapFactory.decodeResource(
getResources(), R.drawable.tick);
canvas.drawBitmap(check, 50, 50, new Paint());
}
}
Проблема в том, что на каждом элементе сетки будет отображаться галочка, а границ тоже нет.Я делаю что-то не так? и самое главное, как я могу заставить пользователя ca выбирать один элемент за раз? если они нажимают на другой элемент, текущая галочка должна быть скрыта. Любая помощь будет оценена! Спасибо!
Комментарии:
1. Кто-нибудь? Любая помощь будет оценена.
2. Может быть, вы можете попробовать: 1. добавить «gridview.setChoiceMode (GridView. CHOICE_MODE_SINGLE);» перед установкой Adapter(). 2. Внутри getView() поместите «ImageView.setCheked (true)» внутри if-else, например, «if(gridview.isItemChecked(position)){imageView.setChecked(true);}else{imageView.setChecked(false);}. Надеюсь, это поможет!