2017-11-09 23 views
0

onTouchイベントを使用して連続的に回転する画像ビューを移動しようとしていますが、画像ビューを再作成しています。その代わりに、それ自身の軸の回りに回転しないで、長い円形の経路の周りを回転する。onTouch MotionEvent.ACTION_MOVEを使用して連続的に回転する画像ビューアンドロイドを移動する

私がしたいことは下の画像のようなものです。これまでのところ、私はroatateすることができる午前

CLICK HERE FOR IMAGE

:私はonTouchイベントを使用して再配置した後に取得しています何

CLICK HERE FOR IMAGE

はこれですこのコードを使用して自軸の周りに画像を表示する:

RotateAnimation rotateanimation = new RotateAnimation(0, 360, 
      Animation.RELATIVE_TO_SELF, 0.5f, 
      Animation.RELATIVE_TO_SELF, 0.5f); 

ピボットポイントとは何かが関係していると思います。以下はコードです。

final ImageView iv = findViewById(R.id.imageView); 
    final RotateAnimation rotateAnimation; 


    RotateAnimation rotateanimation = new RotateAnimation(0, 360, 
      Animation.RELATIVE_TO_SELF, 0.5f, 
      Animation.RELATIVE_TO_SELF, 0.5f); 

    rotateanimation.setDuration(7000); 
    rotateanimation.setInterpolator(new LinearInterpolator()); 
    rotateanimation.setRepeatCount(Animation.INFINITE); 
    rotateanimation.setFillAfter(true); 
    iv.startAnimation(rotateanimation); 


     iv.setOnTouchListener(new View.OnTouchListener() { 
     PointF DownPT = new PointF(); // Record Mouse Position When Pressed Down 
     PointF StartPT = new PointF(); // Record Start Position of 'img' 


     @Override 
     public boolean onTouch(View v, final MotionEvent event) 
     { 


      switch (event.getAction()) 
      { 
       case MotionEvent.ACTION_MOVE : 
        PointF mv = new PointF(event.getX() - DownPT.x -1, event.getY() - DownPT.y -1); 
        iv.setX((int)(StartPT.x+mv.x)); 
        iv.setY((int)(StartPT.y+mv.y)); 

        iv.setPivotX(StartPT.x+mv.x); 
        iv.setPivotY(StartPT.y+mv.y); 

        //something to do here i guess 
        rotateanimation = new RotateAnimation(0, 360, 
          Animation.RELATIVE_TO_SELF, iv.getPivotX(), 
          Animation.RELATIVE_TO_SELF, iv.getPivotY()); 

        iv.startAnimation(rotateanimation); 

        /**************************************************************/ 

        StartPT = new PointF(iv.getX(), iv.getY()); 
        break; 
       case MotionEvent.ACTION_DOWN : 

        int centerXOnImage= iv.getWidth()/2; 
        int centerYOnImage= iv.getHeight()/2; 

        DownPT.x =centerXOnImage; 
        DownPT.y =centerYOnImage; 

        StartPT = new PointF(iv.getX(), iv.getY()); 
        break; 
       case MotionEvent.ACTION_UP : 
        // Nothing have to do 
        break; 
       default : 
        break; 
      } 
      return true; 
     } 
    }); 

答えて

0

頭の掻きとグーグルの2日後、私は道を見つけました。

event.getX()とevent.getY()の代わりにevent.getRawX()とevent.getRawY()を使用するだけです。それは、ユーザーの指の下で回転イメージビューを維持します。

RotateAnimationをObjectAnimationに変更しました。再生中のアニメーションの周りにユーザーのタッチが含まれていると、標準アニメーションが奇妙に動作するためです。

ObjectAnimator anim = ObjectAnimator.ofFloat(iv, "rotation",360f); 
    anim.setDuration(7000); 
    anim.setInterpolator(new LinearInterpolator()); 
    anim.setRepeatCount(Animation.INFINITE); 
    anim.start(); 





     iv.setOnTouchListener(new View.OnTouchListener() { 

     PointF DownPT = new PointF(); // Record Mouse Position When Pressed Down 
     PointF StartPT = new PointF(); // Record Start Position of 'img' 


     @Override 
     public boolean onTouch(View v, final MotionEvent event) 
     { 




      switch (event.getAction()) 
      { 
       case MotionEvent.ACTION_MOVE : 



        PointF mv = new PointF(event.getRawX() , event.getRawY()); 


        iv.setX((int)event.getRawX() - DownPT.x); 
        iv.setY((int)event.getRawY() - DownPT.y); 

        StartPT = new PointF(iv.getX(), iv.getY()); 

        break; 
       case MotionEvent.ACTION_DOWN : 

        int centerXOnImage= iv.getWidth()/2; 
        int centerYOnImage= iv.getHeight()/2; 

        DownPT.x =centerXOnImage; 
        DownPT.y =centerYOnImage; 

        StartPT = new PointF(iv.getX(), iv.getY()); 


        anim.setDuration(2000); 
        anim.start(); 

        break; 
       case MotionEvent.ACTION_UP : 

        //do stuff here 
        break; 
       default : 
        break; 
      } 
      return true; 
     } 
    }); 

は、それが将来的に誰かを助けることを願っています:)

:ここ

コードです

関連する問題