gpt4 book ai didi

android - 如何在android中滑动按钮onTouch事件

转载 作者:太空宇宙 更新时间:2023-11-03 12:35:36 29 4
gpt4 key购买 nike

如何在触摸事件 android 上滑动按钮,方向为左、右、上、下..?...我是 android 的新手,想开发一个回调应用程序。请提供一些链接帮助

callbackButton.setOnTouchListener(new OnTouchListener() {

private float currX;
private float currY;

@Override
public boolean onTouch(View v, MotionEvent event) {

float x1 = 0, x2, y1 = 0, y2, dx, dy , oldx =0,oldy=0;
String direction;

switch(event.getAction()) {

case MotionEvent.ACTION_DOWN:
oldx = event.getX();
oldy = event.getY();
break;

case MotionEvent.ACTION_MOVE:

x2 = event.getX();
y2 = event.getY();
dx = x2-x1;
dy = y2-y1;

// Use dx and dy to determine the direction
if(Math.abs(dx) > Math.abs(dy)) {
if(dx>0) {
direction = "right";
Log.e("right...","moving..");
}else{
direction = "left";
Log.e("left...","moving..");
}
} else {
if(dy>0) {
direction = "down";
Log.e("down...","moving..");

currX = event.getRawX();
currY = event.getRawY();

Log.e("x=", ""+(currX-oldx));
Log.e("y=", ""+(currY-oldy));

MarginLayoutParams marginParams = new MarginLayoutParams(v.getLayoutParams());
marginParams.setMargins((int)(currX-oldx), (int)(currY-oldy),0, 0);

RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(marginParams);
v.setLayoutParams(layoutParams);
} else {
direction = "up";
Log.e("up...","moving..");
}
}
}
return true;
}
});

这是我的 imageButton 在触摸事件时移动的代码。但是这段代码并没有像我想要的那样工作

最佳答案

在这里你会找到关于如何处理触摸事件的解释:

http://developer.android.com/guide/topics/ui/ui-events.html

然后,在on touch方法中,需要

  • 检测用户何时放下手指
  • 存储手指的位置
  • 检测用户何时移动
  • 与之前的位置比较
  • 检测用户何时停止触摸屏幕

示例(使用 http://developer.android.com/training/graphics/opengl/touch.html 中的代码)

@Override
public boolean onTouchEvent(MotionEvent e) {
// MotionEvent reports input details from the touch screen
// and other input controls. In this case, you are only
// interested in events where the touch position changed.

float x = e.getX();
float y = e.getY();

switch (e.getAction()) {
case MotionEvent.ACTION_DOWN:
mIsDown = true;
break;
case MotionEvent.ACTION_MOVE:

float dx = x - mPreviousX;
float dy = y - mPreviousY;

// Here you can try to detect the swipe. It will be necessary to
// store more than the previous value to check that the user move constantly in the same direction
detectSwipe(dx, dy);

case MotionEvent.ACTION_UP:
mIsDown = false;
break;
}

mPreviousX = x;
mPreviousY = y;
return true;
}

在这种简单的情况下,您甚至不需要存储用户放下或抬起手指的时间(因为移动意味着手指向下),但存储 bool 值可能很有用)

祝你的应用程序好运

编辑:

您似乎使用一些代码编辑了您的帖子。你说你没有得到预期的结果,但你没有说你得到了什么。这可能对我们帮助您很有用。

您应该尝试查找是否已经存在检测滑动 Action 的库。我很确定那里有很多

编辑 2:我假设你的按钮是一个简单的 android.Button。一种解决方案是创建一个扩展 Button 的类(例如:MySwipableButton)。在你的 xml 中,你创建一个包含你的 MySwipableButton 的布局,并给它足够的位置来移动(例如,它有 width=fill_parent,因为你希望它在 while 屏幕上滑动)。 MySwipableButton 实现 onTouch 来存储按钮应该在的位置(使用你已有的方法)MySwipableButton 也会覆盖 onDraw(Graphics g)。在 onDraw 中,您将在它必须位于的位置(关于当前滑动)绘制按钮 (super.draw()),并将 View 的其余部分留空

关于android - 如何在android中滑动按钮onTouch事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20606802/

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