如何在特定数量的项目单击中翻转网格视图中的所有项目

时间:2013-10-10 20:52:01

标签: java android gridview flip

我正在尝试做一种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

    }



}

1 个答案:

答案 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;
         }

    }); 
相关问题