gpt4 book ai didi

android - ViewFlipper 不接收触摸事件

转载 作者:行者123 更新时间:2023-11-29 16:21:26 28 4
gpt4 key购买 nike

我正在开发一个 Android 项目,我在其中使用 ViewFlipper 来翻转 child 。为此,我使用了定制的脚蹼。在此我覆盖了 onTouchEvent() 方法。鳍状肢包含每个 child 的图像,但当我尝试翻转时,它没有收到任何触摸事件。当我重写 ViewGroup 方法 onInterceptTouchEvent() 并返回 true 时,翻转就完成了,但由于这个原因,我的 onClickEvent() 未收到每张图片。

我不知道问题出在哪里。当我从 onInterceptTouchEvent() 返回 false 时,会收到点击事件,但不会收到触摸事件。

我错过了什么?

ViewFlipper 的代码:

public class MyViewFlipper extends ViewFlipper {

static final String logTag = "ViewFlipper";
static final int MIN_DISTANCE = 30;
private float downX, downY, upX, upY;
Animation slideLeftIn;
Animation slideLeftOut;
Animation slideRightIn;
Animation slideRightOut;
Context context;
ViewFlipper viewFlipper;

public MyViewFlipper(Context context) {
super(context);
viewFlipper=this;
this.context=context;
System.out.println("I am in MyFlipper() counstructor...");
}

public MyViewFlipper(Context context, AttributeSet attrs) {
super(context, attrs);
this.context=context;
viewFlipper=this;
System.out.println("I am in MyFlipper() counstructor...");
slideLeftIn =
AnimationUtils.loadAnimation(context, R.anim.slide_left_in);
slideLeftOut =
AnimationUtils.loadAnimation(context, R.anim.slide_left_out);
slideRightIn =
AnimationUtils.loadAnimation(context, R.anim.slide_right_in);
slideRightOut =
AnimationUtils.loadAnimation(context, R.anim.slide_right_out);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
downX = event.getX();
downY = event.getY();
return true;
}
case MotionEvent.ACTION_UP: {
upX = event.getX();
upY = event.getY();

float deltaX = downX - upX;
float deltaY = downY - upY;

// swipe horizontal?
if (Math.abs(deltaX) > MIN_DISTANCE) {
// left or right
if (deltaX < 0) {
this.onLeftToRightSwipe();
return true;
}
if (deltaX > 0) {
this.onRightToLeftSwipe();
return true;
}
} else {
if(Math.abs(deltaX)<15){
onClickEvent();
}
//Log.i(logTag, "Swipe was only " + Math.abs(deltaX)
//+ " long, need at least " + MIN_DISTANCE);
}
// swipe vertical?
if (Math.abs(deltaY) > MIN_DISTANCE) {
// top or down
if (deltaY < 0) {
this.onTopToBottomSwipe();
return true;
}
if (deltaY > 0) {
this.onBottomToTopSwipe();
return true;
}
} else {
Log.i(logTag, "Swipe was only " + Math.abs(deltaX)
+ " long, need at least " + MIN_DISTANCE);
}

return true;
}
}
return false;

}

public void onRightToLeftSwipe() {

viewFlipper.setInAnimation(slideLeftIn);
viewFlipper.setOutAnimation(slideLeftOut);
viewFlipper.showNext();
}

public void onLeftToRightSwipe() {

viewFlipper.setInAnimation(slideRightIn);
viewFlipper.setOutAnimation(slideRightOut);
viewFlipper.showPrevious();
}

public void onTopToBottomSwipe() {
Log.i(logTag, "onTopToBottomSwipe!");
// activity.doSomething();
}

public void onBottomToTopSwipe() {
Log.i(logTag, "onBottomToTopSwipe!");
// activity.doSomething();
}

public void onClickEvent(){
Toast.makeText(context, "Click",Toast.LENGTH_SHORT);
}

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return true; // Here if true then Flipping done.
// And if false then click event done.
}

}

最佳答案

我遇到了类似的问题。这是我所做的。我的 View 翻转器中有一个 ListView ,我覆盖了我的 ListView 的 setOnTouchListener() 并从那里为 View 翻转器设置了动画。它对我有用。

根据您的情况尝试覆盖 ImageViewsetOnTouchListener()

关于android - ViewFlipper 不接收触摸事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7089015/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com