2016-11-21 11 views
1

ユーザーがスワイプジェスチャーをした後にアニメーションを開始したいと思います。私はアニメーションを設定するクラスとスワイプを検出しているクラスを持っています。私の問題は、私がそれらをどのように組み合わせるのか分からないことです。私はジェスチャーなしでアニメーションを開始したくありません。 GestureDetectorのif文でアニメーションメソッドを開始する必要がありますか?そして、もし私がそれを行う必要がある場合は、そこからアニメーションを開始するにはどうすればいいですか?android - 開始アニメーション

public class MainActivity extends Activity implements OnGestureListener 
{ 
      private ImageView imageView; 
      private BitmapDrawable ball; 
      float x1,x2; 
      float y1, y2; 
      Context mContext = getApplicationContext(); 
      @Override 
      protected void onCreate(Bundle savedInstanceState) 
      {      
         super.onCreate(savedInstanceState);      
         setContentView(R.layout.activity_main);       
         imageView = (ImageView) findViewById(R.id.imageview1); 

      }   



         public boolean onTouchEvent(MotionEvent touchevent) 
         { 
            switch (touchevent.getAction()) 
            { 
              // when user first touches the screen we get x and y coordinate 
              case MotionEvent.ACTION_DOWN: 
              { 
               x1 = touchevent.getX(); 
               y1 = touchevent.getY(); 
               break; 
              } 
              case MotionEvent.ACTION_UP: 
              { 
               x2 = touchevent.getX(); 
               y2 = touchevent.getY(); 

               //if left to right sweep event on screen 
               if (x1 < x2 && (x2-x1)>=(y1-y2) && (x2-x1)>=(y2-y1)) 
               {  
                imageView.animate() 
                 .translationX(-imageView.getWidth()) //in this case Image goes to the left 
                 .setDuration(180) //it's optional 
                 .setListener(new AnimatorListenerAdapter() { 
                   @Override 
                   public void onAnimationEnd(Animator animation) { 
                    super.onAnimationEnd(animation); 
                   } 
                }) 
                .start(); 

                Toast.makeText(this, "Left to Right Swap Performed", Toast.LENGTH_LONG).show();            
                } 

               // if right to left sweep event on screen 
               if (x1 > x2 && (x1-x2)>=(y1-y2) && (x1-x2)>=(y2-y1)) 
               { 
                imageView.animate() 
                 .translationX(imageView.getWidth()) //in this case Image goes to the right 
                 .setDuration(180) //it's optional 
                 .setListener(new AnimatorListenerAdapter() { 
                   @Override 
                   public void onAnimationEnd(Animator animation) { 
                    super.onAnimationEnd(animation); 
                   } 
                }) 
                .start(); 
                Toast.makeText(this, "Right to Left Swap Performed", Toast.LENGTH_LONG).show(); 
               } 

               // if UP to Down sweep event on screen 
               if (y1 < y2 && (y2-y1)>=(x1-x2) && (y2-y1)>=(x2-x1)) 
               { 
                Toast.makeText(this, "UP to Down Swap Performed", Toast.LENGTH_LONG).show(); 
               } 

               //if Down to UP sweep event on screen 
               if (y1 > y2 && (y1-y2)>=(x1-x2) && (y1-y2)>=(x2-x1)) 
               { 
                Toast.makeText(this, "Down to UP Swap Performed", Toast.LENGTH_LONG).show(); 
                } 
               break; 
              } 
            } 
            return false; 
         } 

答えて

0

ここで具体的に実装したいのは何ですか?私が理解したように、あなたはImageView、右にアニメートしたいですか?

カスタマイズされたクラスを作成する代わりにViewPropertyAnimatorを使用できます。

+0

ViewPropertyAnimator?私はそれを検出クラスに実装できますか?そしてはい、私はスワイプで画像をアニメートしたいです –

+0

どのようなアニメーションを実装しますか? – nullbyte

+0

私はそれがViewAnimationだと思います。アニメーションは動きますが、イメージは右から中央から移動していますが、アニメーションがスワイプを待つようにGestureDetectorにどのように接続するのかわからないので、アプリケーションを起動するとアニメーションが開始されます –

0

ImageViewを移動する場合は、このスワイプの種類に応じてGestureDetectorの実装でこのコードを追加します。

imageView.animate() 
     .translationX(-imageView.getWidth()) //in this case Image goes to the left 
     .setDuration(180) //it's optional 
     .setListener(new AnimatorListenerAdapter() { 
         @Override 
         public void onAnimationEnd(Animator animation) { 
          super.onAnimationEnd(animation); 
          //insert some code here if you want to make some changes to the image instance when animation is finished 

         } 
        }) 
      .start(); 

次の例のように、ここにこのコードを追加することができます

public boolean onTouchEvent(MotionEvent touchevent) 
        { 
           switch (touchevent.getAction()) 
           { 
             // when user first touches the screen we get x and y coordinate 
             case MotionEvent.ACTION_DOWN: 
             { 
              x1 = touchevent.getX(); 
              y1 = touchevent.getY(); 
              break; 
             } 
             case MotionEvent.ACTION_UP: 
             { 
              x2 = touchevent.getX(); 
              y2 = touchevent.getY(); 

              //if left to right sweep event on screen 
              if (x1 < x2 && (x2-x1)>=(y1-y2) && (x2-x1)>=(y2-y1)) 
              {  
               imageView.animate() 
                .translationX(-imageView.getWidth()) //in this case Image goes to the left 
                .setDuration(180) //it's optional 
                .setListener(new AnimatorListenerAdapter() { 
                  @Override 
                  public void onAnimationEnd(Animator animation) { 
                   super.onAnimationEnd(animation); 
                  } 
               }) 
               .start(); 

               Toast.makeText(this, "Left to Right Swap Performed", Toast.LENGTH_LONG).show();            
               } 

              // if right to left sweep event on screen 
              if (x1 > x2 && (x1-x2)>=(y1-y2) && (x1-x2)>=(y2-y1)) 
              { 
               imageView.animate() 
                .translationX(imageView.getWidth()) //in this case Image goes to the right 
                .setDuration(180) //it's optional 
                .setListener(new AnimatorListenerAdapter() { 
                  @Override 
                  public void onAnimationEnd(Animator animation) { 
                   super.onAnimationEnd(animation); 
                  } 
               }) 
               .start(); 
               Toast.makeText(this, "Right to Left Swap Performed", Toast.LENGTH_LONG).show(); 
              } 

              // if UP to Down sweep event on screen 
              if (y1 < y2 && (y2-y1)>=(x1-x2) && (y2-y1)>=(x2-x1)) 
              { 
               Toast.makeText(this, "UP to Down Swap Performed", Toast.LENGTH_LONG).show(); 
              } 

              //if Down to UP sweep event on screen 
              if (y1 > y2 && (y1-y2)>=(x1-x2) && (y1-y2)>=(x2-x1)) 
              { 
               Toast.makeText(this, "Down to UP Swap Performed", Toast.LENGTH_LONG).show(); 
               } 
              break; 
             } 
           } 
           return false; 
        } 

を、私はこのコードをあなたのアイデアを与える願っています!

+0

これまでのところよく見えますが、どこに追加しますか?アニメーションクラスでは?私はそれにかなり新しいので、それを設定するには問題がある、ごめんなさい –

+0

あなたは答えを得て、私は願っています。 – nullbyte

+0

ありがとうございます。私のアニメーションクラスはもはや必要ではないですか? –

関連する問題