2017-11-12 13 views
0

私は単純なカードゲームで作業しています。 私は単純にイメージビューであるカードスタックを持っています。私はカスタムカードオブジェクト(ビュー)を作成します。カードを動かすために、私はCardオブジェクトのonTouchEventメソッドをオーバーライドしました。作成直後にビューを移動する

質問は、スタックをタップしてカードを作成するとすぐにカードを移動するにはどうすればいいですか?私が最初にタップ(カードを作成)する必要がある瞬間、指を持ち上げてもう一度タップしてカードを動かしてください。

私は既にHow to programmatically trigger the touch event in android?を見たことがありますが、これはちょっとタッチイベントを誘発します。

活動

public void createCard(View v) { 
    if (mCardCounter < 4) { 
     Card card = new Card(this); 
     FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT)); 
     layoutParams.setMargins(30, 30, 0, 0); 
     card.setLayoutParams(layoutParams); 
     mRootFrameLayout.addView(card); 
     mCardCounter++; 
    } 

カード

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    super.onTouchEvent(event); 

    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      dX = this.getX() - event.getRawX(); 
      dY = this.getY() - event.getRawY(); 
      break; 
     case MotionEvent.ACTION_MOVE: 
      this.animate() 
        .x(event.getRawX() + dX) 
        .y(event.getRawY() + dY) 
        .setDuration(0) 
        .start(); 
      } 
      break; 
     case MotionEvent.ACTION_UP: 
      break; 
    } 
    return true; 
} 
+0

の内側にあなたは私の提案を試してみましたか?それは動作しましたか? – Barns

答えて

0

あなたはこのような何かを試みることができます。

アクティビティ全体の有効範囲を持つブール値を作成します。

boolean isActionDown = false; 

はその後onTouchEvent方法

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    super.onTouchEvent(event); 

    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      break; 
     case MotionEvent.ACTION_MOVE: 
      if(!isActionDown){ 
       isActionDown = true; 
       dX = this.getX() - event.getRawX(); 
       dY = this.getY() - event.getRawY(); 
      } 
      else{ 
       this.animate() 
        .x(event.getRawX() + dX) 
        .y(event.getRawY() + dY) 
        .setDuration(0) 
        .start(); 
       } 
      } 
      break; 
     case MotionEvent.ACTION_UP: 
      isActionDown = false; 
      break; 
    } 
    return true; 
} 
+0

あなたのアプローチをもう少し説明できますか?問題は、Cardオブジェクトが作成されて画面に追加されただけなので、CardオブジェクトがtouchEventをまったく受け取らないということです。最初のタッチイベントは、指を持ち上げて再び触れるときに発火する – Zuop

関連する問題