我正在尝试做一种flipcard应用程序,其中有图像的gridview显示相同的图像,比如card_back。
单击每个图像时,它会翻转显示另一个图像,该图像对于gridview的每个项目都是不同的,例如card_front。
我想要做的是,如果显示两个card_front,在点击下一个项目时,应该翻转前两张卡片以显示他们的card_back image.ie,每次最多只能显示两张卡片他们的card_front image.But我不知道该怎么做。
任何人都可以帮助我。谢谢。
这是在gridview中翻转图像的代码。
public class FullscreenActivity extends Activity
implements OnItemClickListener, AnimationListener
{ ImageView imageView ;
int pos;
Animation animation1;
Animation animation2;
int[] clicked = {0,0,0,0,0,0,0,0,0,0,0,0};
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fullscreen);
animation1 = AnimationUtils.loadAnimation(this, R.anim.to_middle);
animation1.setAnimationListener(this);
animation2 = AnimationUtils.loadAnimation(this, R.anim.from_middle);
animation2.setAnimationListener(this);
GridView gridview = (GridView) findViewById(R.id.gridview);
gridview.setAdapter(new ImageAdapter(this));
gridview.setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView<?> parent, View v, int position, long id)
{
pos=position;
imageView = ((ViewHolder) v.getTag()).img;
(imageView).clearAnimation();
(imageView).setAnimation(animation1);
(imageView).startAnimation(animation1);
}
});
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3)
{
// TODO Auto-generated method stub
}
@Override
public void onAnimationEnd(Animation arg0) {
if (arg0==animation1) {
if(clicked[pos]==0)
{
imageView.setImageResource(ImageAdapter.mThumbSelected[pos]);
clicked[pos]=1;
} else if(clicked[pos]==1) {
clicked[pos]=0;
imageView.setImageResource(R.drawable.card_back);
}
imageView.clearAnimation();
imageView.setAnimation(animation2);
imageView.startAnimation(animation2);
}
}
@Override
public void onAnimationRepeat(Animation animation) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationStart(Animation animation) {
// TODO Auto-generated method stub
}
}
答案 0 :(得分:1)
定义一个计数器并在某处向卡片保存两个标识符。这是伪代码的一种解决方案:
//global variable
int flippedCardCounter = 0;
Array[] flippedCards = new Array[2];
gridview.setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView<?> parent, View v, int position, long id)
{
switch(flippedCardCounter)
//flippedCardCounter = 0 -> no cards flipped
case 0:
flippeCardCounter++; //increase counter
flippedCard[0] = position //save reference
startFlipAnimation(yourItemAtPosition(0));
break;
//flippedCardCounter = 1 -> one card flipped
case 1:
flippeCardCounter++; //increase counter
flippedCard[1] = position //save reference
startFlipAnimation(yourItemAtPosition(1));
break;
//flippedCardCounter = 2 -> hide two flipped card, flip one card
case 2:
flippeCardCounter = 0; //reset counter
//get reference to already flipped card and hide it
startUnFlipAnimation(yourItemAtPosition(flippedCards[0]));
startUnFlipAnimation(yourItemAtPosition(flippedCards[1]));
//reset your array ()
flippedCards = new Array[2]; //not really needed
flippedCards[0] = position
flippeCardCounter++; //increase counter
startFlipAnimation(yourItemAtPosition(position));
break;
}
});