gpt4 book ai didi

android - 网格布局上的 Fling 手势检测

转载 作者:IT老高 更新时间:2023-10-28 12:48:11 26 4
gpt4 key购买 nike

我想让 fling 手势检测在我的 Android 应用程序中工作。

我拥有的是一个包含 9 个 ImageViewGridLayout。来源可以在这里找到:Romain Guys's Grid Layout .

我拿的那个文件来自 Romain Guy 的 Photostream application并且只是稍作调整。

对于简单的点击情况,我只需要为我添加的每个 ImageView 设置 onClickListener 作为实现 的主要 activity View.OnClickListener。实现识别 fling 的东西似乎要复杂得多。我想这是因为它可能跨越 views?

  • 如果我的 Activity 实现OnGestureListener 我不知道怎么做将其设置为手势监听器GridImage View 添加。

    public class SelectFilterActivity extends Activity implements
    View.OnClickListener, OnGestureListener { ...
  • 如果我的 Activity 实现OnTouchListener 那么我没有onFling 方法来 override(它有两个事件作为参数允许我来确定 throw 是否是值得注意)。

    public class SelectFilterActivity extends Activity implements
    View.OnClickListener, OnTouchListener { ...
  • 如果我制作自定义 View,例如扩展 ImageViewGestureImageView,我不知道如何告诉 Activity View 中发生了 fling。无论如何,我尝试了这个,当我触摸屏幕时没有调用方法。

我真的只需要一个跨 View 工作的具体示例。我应该什么、何时以及如何附加这个listener?我还需要能够检测单击。

// Gesture detection
mGestureDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() {

public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
int dx = (int) (e2.getX() - e1.getX());
// don't accept the fling if it's too short
// as it may conflict with a button push
if (Math.abs(dx) > MAJOR_MOVE && Math.abs(velocityX) > Math.absvelocityY)) {
if (velocityX > 0) {
moveRight();
} else {
moveLeft();
}
return true;
} else {
return false;
}
}
});

是否可以在我的屏幕顶部放置一个透明 View 来捕捉弹幕?

如果我选择不从 XML inflate 我的子 ImageView ,我可以将 GestureDetector 作为构造函数参数传递给 ImageView 的新子类> 我创造的?

这是我试图让 fling 检测工作的非常简单的 Activity :SelectFilterActivity (Adapted from photostream) .

我一直在查看这些来源:

到目前为止,没有什么对我有用,我希望得到一些指导。

最佳答案

感谢 Code Shogun ,我根据自己的情况调整了它的代码。

让你的 Activity 像往常一样实现OnClickListener:

public class SelectFilterActivity extends Activity implements OnClickListener {

private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_MAX_OFF_PATH = 250;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;
private GestureDetector gestureDetector;
View.OnTouchListener gestureListener;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

/* ... */

// Gesture detection
gestureDetector = new GestureDetector(this, new MyGestureDetector());
gestureListener = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}
};

}

class MyGestureDetector extends SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
try {
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
return false;
// right to left swipe
if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Toast.makeText(SelectFilterActivity.this, "Left Swipe", Toast.LENGTH_SHORT).show();
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Toast.makeText(SelectFilterActivity.this, "Right Swipe", Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
// nothing
}
return false;
}

@Override
public boolean onDown(MotionEvent e) {
return true;
}
}
}

将您的手势监听器附加到您添加到主布局的所有 View ;

// Do this for each view added to the grid
imageView.setOnClickListener(SelectFilterActivity.this);
imageView.setOnTouchListener(gestureListener);

当你的重写方法被击中时,敬畏地观看, Activity 的 onClick(View v) 和手势监听器的 onFling

public void onClick(View v) {
Filter f = (Filter) v.getTag();
FilterFullscreenActivity.show(this, input, f);
}

post 'fling' 舞蹈是可选的,但鼓励。

关于android - 网格布局上的 Fling 手势检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/937313/

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