2013-08-29 69 views
1

我正在學習android中的動畫。使用視圖屬性動畫在gridview中移動項目

我試圖建立一個網格視圖,使項目開關位置,當用戶點擊每兩個項目(如糖果美眉)

下面是我使用

myGrid = (GridView) mainView.findViewById(R.id.my_grid); 
    myGrid.setAdapter(adapter); 
    myGrid.setOnItemClickListener(new OnItemClickListener() { 

     public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 

      if(mVPosition == null){ 
       mVPosition = position; 
      } 
      else{ 
        View item1View = v; 
        View item2View = myGrid.getChildAt(mVPosition); 

        int originalPos1[] = new int[2]; 
        item1View.getLocationOnScreen(originalPos1); 

        int originalPos2[] = new int[2]; 
        item2View.getLocationOnScreen(originalPos2); 

        swVId = mThumbIds[position]; 
        mThumbIds[position] = mThumbIds[mVPosition]; 
        mThumbIds[mVPosition] = swVId; // Swap items' image 
        // mThumbIds is used as image source of myGrid define in adapter code 

        item1View.animate().x(originalPos1[0]).y(originalPos1[1]).setListener(new AnimatorListener() { 
            @Override 
            public void onAnimationStart(Animator animation) { 

            } 
            @Override 
            public void onAnimationRepeat(Animator animation) { 
            } 
            @Override 
            public void onAnimationEnd(Animator animation) { 

             adapter.notifyDataSetChanged(); 
            } 
            @Override 
            public void onAnimationCancel(Animator animation) { 

            } 
            }); 

       item2View.animate().x(originalPos2[0]).y(originalPos2[1]).setListener(new AnimatorListener() { 
            @Override 
            public void onAnimationStart(Animator animation) { 

            } 
            @Override 
            public void onAnimationRepeat(Animator animation) { 
            } 
            @Override 
            public void onAnimationEnd(Animator animation) { 

             adapter.notifyDataSetChanged(); 
            } 
            @Override 
            public void onAnimationCancel(Animator animation) { 

            } 
            }); 
    mVPosition = null; 

       } 
    }); 
代碼

問題是物品在y方向上移動不正確。如果我只讓它們水平移動,兩個項目會切換位置,但是如果我希望它們垂直切換,它們都會移動到網格上的某個奇怪位置,並且移動的項目不能再次單擊。

這個問題與使用「adapter.notifyDataSetChanged();」有關和ViewPropertyAnimation?

感謝

回答

0

必須首先getLocationOnScreen方法定義GridView的位置,並從每個項目中減去如下面的代碼

int gridLoc[] = new int[2]; 
myGrid.getLocationOnScreen(gridLoc); 
. 
. 
. 
item1View.animate().x(originalPos1[0]-gridLoc[0]).y(originalPos1[1]-gridLoc[1]).... 
. 
. 
. 
item2View.animate().x(originalPos2[0]-gridLoc[0]).y(originalPos2[1]-gridLoc[1])....