0
我正在定製ViewFlipper
我在翻轉頁面通過覆蓋鰭狀肢OnTouch()
。但我的問題是無法獲得添加到鰭狀肢的兒童觸摸事件。僅在ViewFlipper
空白部分獲得直接觸摸事件。因此,如何通過啓用子點擊事件來獲取所有頁面上的觸摸事件。這是我的自定義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;
}
public MyViewFlipper(Context context, AttributeSet attrs) {
super(context, attrs);
this.context=context;
viewFlipper=this;
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;
}
}
感謝Yashwanth的回覆,我也刪除了onInterceptTouchEvent() ,但然後我的翻轉沒有完成,再次當真正的翻轉完成時,當錯誤的點擊事件,但不是兩個同時完成。 –