2017-11-12 14 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