我正在开发一款简单的纸牌游戏。 我有一个卡片堆栈,它只是一个imageview。在触摸时我创建一个自定义卡对象(视图)。为了移动卡片,我已经覆盖了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 :(得分:0)
你可以尝试这样的事情。
创建一个具有整个Activity的范围的布尔值。
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;
}