我有一個小記憶遊戲,你可以點擊連續2張圖片。圖像顯示在GridView中。點擊2次後,我會比較這些翻轉的圖像。如果它們不一樣,該代碼就會被執行:塊訪問GridView
else{
// new try
Handler mHandler = new Handler();
mHandler.postDelayed(update, 2000);
}
clickCounter = -1;
}
}
private Runnable update = new Runnable() {
public void run() {
viewHolder[0].setImageResource(R.drawable.card_back);
viewHolder[1].setImageResource(R.drawable.card_back);
}
};
,使用戶可以看到點擊的圖片2秒鐘,然後他們就會切換回卡的背面。但是我怎樣才能在這兩秒內阻止GridView/ImageView上的用戶操作。否則,在兩秒鐘內可以發現任何數量的圖像而無需進行比較。
我嘗試這樣的東西:
gridview.setClickable(false);
或
gridview.setEnabled(false);
但我總是得到一個錯誤。我會很感激的幫助。
ImageAdaper.java
final class ImageAdapter extends BaseAdapter {
private final List<Item> mItems = new ArrayList<Item>();
private final LayoutInflater mInflater;
private int clickCounter = -1;
private int countPairs = 1;
private Context mContext;
private ImageView[] viewHolder;
private Integer[] pieces;
public ImageAdapter(Context context) {
mContext = context;
viewHolder = new ImageView[2];
List ipieces = new ArrayList();
for(int i=0; i<6; i++) {
ipieces.add(i);
ipieces.add(i);
}
Collections.shuffle(ipieces);
pieces = (Integer[]) ipieces.toArray(new Integer[0]);
mInflater = LayoutInflater.from(context);
mItems.add(new Item(R.drawable.pic_1));
mItems.add(new Item(R.drawable.pic_2));
mItems.add(new Item(R.drawable.pic_3));
mItems.add(new Item(R.drawable.pic_4));
mItems.add(new Item(R.drawable.pic_5));
mItems.add(new Item(R.drawable.pic_6));
Collections.shuffle(mItems);
}
@Override
public int getCount() {
return pieces.length;
}
@Override
public Item getItem(int i) {
return mItems.get(i);
}
@Override
public long getItemId(int i) {
return mItems.get(i).drawableId;
}
@Override
public View getView(final int i, final View view, ViewGroup viewGroup) {
View v = view;
ImageView picture;
if (v == null) {
v = mInflater.inflate(R.layout.grid_item, viewGroup, false);
v.setTag(R.id.picture, v.findViewById(R.id.picture));
}
picture = (ImageView) v.getTag(R.id.picture);
picture.setImageResource(R.drawable.card_back);
picture.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
switchImage(i,v);
}
});
return v;
}
public void switchImage(int position, View view){
ImageView Image = (ImageView) view;
if(clickCounter == -1){
// first click on an image
// convert images to avoid OOME
convertImage(Image,position);
clickCounter = position;
viewHolder[0] = Image;
Log.d("ImageAdapter", "FIRST CLICK!!!!" + Integer.toString(position));
}
else{
//second click
viewHolder[1] = Image;
Log.d("ImageAdapter", "SECOND CLICK!!!!! " + Integer.toString(position));
// convert images to avoid OOME
convertImage(Image,position);
//both pictures are matching
if(pieces[clickCounter]==pieces[position]){
Log.d("ImageAdapter", "MATCH!!!!!!!!!! ");
if(countPairs<6)Toast.makeText(mContext, "Du hast ein Paar gefunden!",Toast.LENGTH_SHORT).show();
deleteClicker();
countPairs++;
}
else{
// new try
Handler mHandler = new Handler();
mHandler.postDelayed(update, 2000);
}
clickCounter = -1;
}
}
private Runnable update = new Runnable() {
public void run() {
viewHolder[0].setImageResource(R.drawable.card_back);
viewHolder[1].setImageResource(R.drawable.card_back);
}
};
public void deleteClicker(){
viewHolder[0].setEnabled(false);
viewHolder[0].setOnClickListener(null);
viewHolder[1].setOnClickListener(null);
if(countPairs == 6){
Toast.makeText(mContext, "Juhu! Du hast gewonnen",Toast.LENGTH_SHORT).show();
}
}
public void convertImage(ImageView Image, int position){
Item item = getItem(pieces[position]);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inDither = false;
options.inJustDecodeBounds = false;
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
options.inSampleSize = 3;
Bitmap icon = BitmapFactory.decodeResource(mContext.getResources(),item.drawableId,options);
Image.setImageBitmap(icon);
}
private static class Item {
public final int drawableId;
Item(int drawableId) {
this.drawableId = drawableId;
}
}
}
請張貼當您使用setClickable – Lokesh
試不知道,但可以b爲你工作http://stackoverflow.com/questions/26354950/how-to-trigger-proper-longclick-event錯誤-on-listview – Lokesh