2011-09-12 122 views
2

我有兩個圖像視圖翻譯點擊。 動畫適用於一個視圖,但對於第二個圖像視圖,我的動畫不是根據提供的座標。Android動畫翻譯在Android 2.2

當我點擊頂部圖像視圖(IMG1)它正確地向底部圖像視圖(IMG2)動畫。但是當我點擊底部圖像視圖時,它從某處向下移動並僅移動到圖像視圖2初始位置。儘管預期的行爲是,它應該從其位置到頂部圖像視圖(img1)的初始位置進行動畫處理。

我的XML是

​​

和我的Java類文件是

public class AnimationDemo extends Activity implements OnClickListener 
{ 
    private ImageView img1; 
    private ImageView img2; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     img1 = (ImageView)findViewById(R.id.imgview1); 
     img2 = (ImageView)findViewById(R.id.imgview2);   
     img1.setOnClickListener(this); 
     img2.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View arg0) 
    { 
     int x1,y1; // Coordinates of first image view 
     int x2,y2; //Coordinates of second image view 

     ImageView img = (ImageView)arg0; 
     x1 = img1.getLeft(); 
     y1 = img1.getTop(); 

     x2 = img2.getLeft(); 
     y2 = img2.getTop(); 

     TranslateAnimation slide; 
     if(arg0 == img1) 
     { 
      //translate from img view 1 to img view 2 
      slide = new TranslateAnimation(Animation.ABSOLUTE,x1,Animation.ABSOLUTE, x2,Animation.ABSOLUTE, y1,Animation.ABSOLUTE,y2); 
     } 
     else 
     { 
      // translate from img view 2 to img view 1 
      slide = new TranslateAnimation(Animation.ABSOLUTE,x2,Animation.ABSOLUTE, x1,Animation.ABSOLUTE, y2,Animation.ABSOLUTE,y1); 
     } 
     slide.setDuration(1000); 
     slide.setFillAfter(true); 
     img.startAnimation(slide); 
    } 
} 
+0

你可能想解釋到底發生了什麼問題,而不是說「不工作」。它是不正確的座標動畫?錯誤的時間?在錯誤的觸摸? –

+0

當我點擊頂部圖像視圖(IMG1)它正確地向底部圖像視圖(IMG2)動畫。但是當我點擊底部圖像視圖時,它從某處向下移動並僅移動到圖像視圖2初始位置。 儘管預期的行爲是,它應該從其位置到頂部圖像視圖(img1)初始位置進行動畫處理。 – ashish2sharma

+0

請幫助我。 – ashish2sharma

回答

3

你的煩惱是由於您的位置。我相信當動畫以絕對像素移動時,它是相對於它自身的。所以在你的第二個動畫中,你實質上是從x2 = 220到x1 = 0,y2 = 419到y1 = 0。因此,它是從(currentX + 220,+ currentY 419)至(currentX 0,currentY 0),其本身=

移動爲了解決此實例僅否定和像這樣切換第二滑動聲明的值:

TranslateAnimation slide; 
     if(arg0 == img1) 
     { 
      //translate from img view 1 to img view 2 
      slide = new TranslateAnimation(Animation.ABSOLUTE,x1,Animation.ABSOLUTE, x2,Animation.ABSOLUTE, y1,Animation.ABSOLUTE,y2); 
     } 
     else 
     { 
      // translate from img view 2 to img view 1 
//   slide = new TranslateAnimation(Animation.ABSOLUTE,x2,Animation.ABSOLUTE, x1,Animation.ABSOLUTE,y2,Animation.ABSOLUTE,y1); 
      slide = new TranslateAnimation(Animation.ABSOLUTE,0,Animation.ABSOLUTE, (-x2),Animation.ABSOLUTE,0,Animation.ABSOLUTE, (-y2)); 
     } 

這僅是因爲你的左上精靈是雖然在0,0。你必須認真反思你如何移動你的精靈。請記住,TranslateAnimation將它們相對於其當前位置移動,基本上將精靈原始位置設置爲(0,0)。

可能是錯的,但希望它有幫助。它爲我工作...

對不起,花了這麼長時間纔回到你身邊,我失去了你的文章,並由於某種原因找不到它。很高興你早先評論過!

+0

謝謝。您的解決方案解決了問題。 – ashish2sharma