2014-07-21 92 views
0

在android應用程序中,我有一個imageview。我想把另一張圖片放在上面。當用戶觸摸圖像時,頂部圖像將像窗簾一樣向上滑動,以顯示其下面的圖像。當用戶移開他的手指時,我將轉到另一頁android imageview窗簾風格動畫

我該如何實現這一目標?

enter image description here

基本上我知道我必須實現OnTouch監聽和WORL對「ACTION_DOWN」和「ACTION_UP」案件。但是我不知道如何做到這一幕帷幕動畫?因爲翻譯將翻譯整個圖像,而不僅僅是在圖像畫布中。

感謝所有幫助

回答

1

有可能通過具有兩個ImageView小號FrameLayout下實現它:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/parent"> 
    <ImageView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:src="@drawable/solid_blue" 
     android:id="@+id/img_back"/> 
    <ImageView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:src="@drawable/solid_green" 
     android:id="@+id/img_front"/> 
</FrameLayout> 

而且在活動中加入onTouchListener和平移前的ImageView會做的工作:

ObjectAnimator mSlideAnim; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.curtainstyle); 

    final ImageView imgFront = (ImageView) findViewById(R.id.img_front); 

    FrameLayout parent = (FrameLayout) findViewById(R.id.parent); 
    parent.setOnTouchListener(new View.OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      int action = event.getAction(); 
      switch (action) { 
       case MotionEvent.ACTION_DOWN: 
        if (mSlideAnim == null) { 
         triggerSlideUpAnimation(imgFront); 
        } 
        break; 
       case MotionEvent.ACTION_MOVE: 
        break; 
       case MotionEvent.ACTION_UP: 
       case MotionEvent.ACTION_CANCEL: 
        goToAnotherPage(); 
        break; 
      } 
      return true; 
     } 
    }); 
} 

private void triggerSlideUpAnimation(ImageView imgFront) { 
    int height = imgFront.getHeight(); 
    mSlideAnim = ObjectAnimator.ofFloat(imgFront, "translationY", 0, -height); 
    mSlideAnim.setDuration(300); 
    mSlideAnim.start(); 
} 

private void goToAnotherPage() { 
    Toast.makeText(this, "Go to another page", Toast.LENGTH_SHORT).show(); 
}