2012-10-22 6 views
1
package com.example.flingtry; 

import android.os.Bundle; 
import android.app.Activity; 
import android.content.Intent; 
import android.graphics.drawable.AnimationDrawable; 
import android.view.GestureDetector; 
import android.view.GestureDetector.SimpleOnGestureListener; 
import android.view.View.OnClickListener; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.MotionEvent; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 
import android.widget.Toast; 
import android.support.v4.app.NavUtils; 

public class MainActivity extends Activity implements OnClickListener 
{ 
    private static final int SWIPE_MIN_DISTANCE = 10; 
    private static final int SWIPE_MAX_OFF_PATH = 50; 
    private static final int SWIPE_THRESHOLD_VELOCITY = 10; 
    private GestureDetector gestureDetector; 
    TextView img; 
    AnimationDrawable ribinclickanimation; 
    Button btn1; 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     gestureDetector = new GestureDetector(new MyGestureDetector()); 
     img= (TextView) findViewById(R.id.img); 
     img.setBackgroundResource(R.anim.clickframeanimation); 
     ribinclickanimation= (AnimationDrawable) img.getBackground(); 
     btn1= (Button) findViewById(R.id.btn1); 
     btn1.setOnClickListener(this); 
     // Set the touch listener for the main view to be our custom gesture listener 
     img.setOnTouchListener(new View.OnTouchListener() 
     { 
      public boolean onTouch(View v, MotionEvent event) 
      { 
       if (gestureDetector.onTouchEvent(event)) 
       { 
        return true; 
       } 
       return false; 
      } 
     }); 
    } 
    class MyGestureDetector extends SimpleOnGestureListener 
    { 
     @Override 
     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) 
     { 
      if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH && Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) 
      { 
       ribinclickanimation.stop(); 
       Toast.makeText(getApplicationContext(), "Helloooo", Toast.LENGTH_SHORT).show(); 
       img.setBackgroundResource(R.anim.clickframeanimation); 
       ribinclickanimation= (AnimationDrawable) img.getBackground(); 
       ribinclickanimation.start(); 
       return false; 
      } 
      return false; 
     } 

     // It is necessary to return true from onDown for the onFling event to register 
     @Override 
     public boolean onDown(MotionEvent e) 
     { 
       return true; 
     } 
     @Override 
     public boolean onScroll(MotionEvent e1, MotionEvent e2,float distanceX, float distanceY) 
     { 
      // beware, it can scroll to infinity 
      return true; 
     } 
    } 
    public void onClick(View arg0) 
    { 
     // TODO Auto-generated method stub 
     Toast.makeText(getApplicationContext(), "Helloooo", Toast.LENGTH_SHORT).show(); 
    } 
} 

이 코드는 제스처를 사용하여 이발사 이벤트에 애니메이션을 적용하는 데 사용됩니다. 그러나 여기에서 문제는 드래그가 끝난 후에 애니메이션이 일어나는 데 시간이 걸린다는 것입니다. 원하는 것은 이미지를 드래그하면서 동시에 애니메이션을 적용해야한다는 것입니다. 당신이 MotionEvent.ACTION_MOVE 사용보기에서 이동 방향을 감지 한 번 MotionEvent.ACTION_MOVE플링 이벤트에 애니메이션 적용

: MotionEvent.ACTION_UP :

+0

드래그하는 동안 애니메이션이 작동하도록 하시겠습니까? – 13hsoj

+0

예 .. 그렇지 않으면 그 완벽하게 작동합니다. 곧 애니메이션을 드래그합니다. – sankettt

+1

그러면 스크롤 할 때 호출되는 onScroll 메서드 안에 코드를 삽입 할 수 있습니다. 플링은 fling 동작이 완료 될 때만 호출됩니다. – 13hsoj

답변

1

제안은 사용 onTouch 대신 제스처 청취자의

쓰기의 경우 MotionEvent.ACTION_DOWN입니다. setTranslationX 또는 원하는 방향에 따라 view.setTranslationY ... 보기에서 특정 끌기/이동 후 원하는 것을 놓으십시오.

이것은 예제 코드로드가 c 인 경우에만 표시됩니다. 사용 가능한

관련 문제