我想fling在我的Android应用程序中运行手势检测.
我拥有的是GridLayout包含9 ImageView秒的内容.源代码可以在这里找到:Romain Guys的网格布局.
我拿的那个文件来自Romain Guy的Photostream应用程序,并且只是略微适应了.
对于简单的点击情况,我只需要onClickListener为ImageView我添加的每一个设置为activity实现的主要部分View.OnClickListener.实现识别a的东西似乎无比复杂fling.我认为这是因为它可能跨越views?
如果我的活动实现,
OnGestureListener我不知道如何将其设置为我添加Grid的Image视图或视图的手势监听器.
public class SelectFilterActivity extends Activity implements
View.OnClickListener, OnGestureListener { ...
Run Code Online (Sandbox Code Playgroud)如果我的活动实现,
OnTouchListener那么我没有
onFling方法override(它有两个事件作为参数,允许我确定是否值得注意).
public class SelectFilterActivity extends Activity implements
View.OnClickListener, OnTouchListener { ...
Run Code Online (Sandbox Code Playgroud)如果我做了一个自定义View,就像GestureImageView那个扩展ImageView我不知道如何告诉活动fling从视图中发生了.无论如何,我试过这个,当我触摸屏幕时没有调用方法.
我真的只需要一个跨视图的具体例子.什么,何时以及如何附上这个listener?我还需要能够检测单击.
// Gesture detection
mGestureDetector = new …Run Code Online (Sandbox Code Playgroud) 我的问题:如何检测用户向上/向下移动手指的时间与左/右相比(我如何知道他们的手指向哪个方向移动)?
我的情况:我想在他们上下移动手指时改变我的应用程序的亮度(向上=更亮,向下=更暗),我想根据他们的左/右滑动在活动和/或视图之间切换.
有没有人知道Pinterest或Tumblr如何实现"刷卡"方法.
即在Pinterest上,您可以点击新闻Feed上的帖子.比DetailActivity已启动并显示所选帖子的详细信息.您可以按后退按钮返回新闻Feed活动,或者您可以向左滑动(详细信息活动)以返回新闻Feed活动.
视频:http://youtu.be/eVcSCWetnTA
通常我会使用overridePendingTransition(),但overridePendingTransition()需要动画(像资源ID R.anim.foo).仅当用户进行滑动手势时,Pinterest和Tumblr才会启动动画.他们还根据手指移动支持某种"逐帧动画".因此,他们跟踪手指移动的距离,并将过渡动画设置为相应的百分比值.
我知道如何使用"真正的java"动画/ AnimatorSet对象FragmentTransaction来动画片段替换.使用片段我必须覆盖onCreateAnimator(),但我不知道如何使用Activities实现类似的东西.活动有onCreateAnimator()(或类似的东西)吗?也不知道如何滑动行为,因为它现在没有启动动画,但更多的是逐步改变Window/Activity/Fragment的属性或者其他......
有什么建议?
编辑:我在youtube上找到了一个pinterest应用程序的视频:http://youtu.be/eVcSCWetnTA 这就是我想要实现的内容.
我猜Pinterest正在使用Fragments并onCreateAnimator()实现"向后滑动".由于我的应用程序已经在一个活动中已经有Fragment和ChildFragments,因此如果我可以为活动实现它,那将更容易.
再一次:我知道如何检测滑动手势,这不是我要求的.观看youtube视频:http://youtu.be/eVcSCWetnTA
更新:我创建了一个小库,它与Pinterest或Tumblrs实现的行为并不完全相同,但对于我的应用程序,这似乎是一个很好的解决方案:https://github.com/sockeqwe/SwipeBack? source = c
我有一个Android应用程序,其中有List View就像这个

现在,我想以相同的方式对列表项的右/左滑动执行两个不同的活动本机调用日志的工作原理
右键滑动清单
我想要这种类型的滑动.任何人都可以知道如何实现它.基本上我想实施SimpleOnGestureListener.
我已经阅读了sir gav 回答的帖子在网格布局上回答了手势检测,之后我成功实现了左滑动和右滑动检测,但我唯一没有看到滑动发生在哪个List Item上.
2013年5月24日更新
现在我可以使用此代码检测滑动操作 -
SwipeDetector.java
/**
* Class swipe detection to View
*/
public class SwipeDetector implements View.OnTouchListener {
public static enum Action {
LR, // Left to right
RL, // Right to left
TB, // Top to bottom
BT, // Bottom to top
None // Action not found
}
private static final int HORIZONTAL_MIN_DISTANCE = 30; // The minimum
// distance for
// …Run Code Online (Sandbox Code Playgroud) 列表视图项可以响应向左滑动并向右滑动吗?
如果是这样,如何应用android滑动向左或向右滚动打开不同的意图?我想要像默认情况下在Android中的联系人视图上的呼叫电话或消息一样.
谢谢
Activity当用户在屏幕的任何位置提供正确的滑动时,我必须完成.我已经尝试过,GestureDetector如果在其他视图中既不存在ScrollView又不RescyclerView存在也不允许检测滑动它们,那就可以正常工作.所以我尝试了一种不同的方式,通过以编程方式将视图叠加到所有这些视图的顶部,然后尝试检测其上的滑动事件.ActivityonClickListener
private void swipeOverToExit(ViewGroup rootView) {
OverlayLayout child = new OverlayLayout(this);
ViewGroup.LayoutParams layoutParams =
new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
child.setLayoutParams(layoutParams);
rootView.addView(child);
}
Run Code Online (Sandbox Code Playgroud)
OverlayLayout
public class OverlayLayout extends RelativeLayout {
private float x1, x2;
private final int MIN_DISTANCE = 150;
public OverlayLayout(Context context) {
super(context);
}
public OverlayLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public OverlayLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public OverlayLayout(Context context, AttributeSet attrs, int …Run Code Online (Sandbox Code Playgroud) 我正在编写自己的图像查看器,使用户可以向左或向右滑动以查看下一个\上一个图像.我想根据投掷速度为图像变化设置动画.
为了检测一个手势和它的速度,我按照这个基本的手势检测,并按照接受的答案建议:
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 …Run Code Online (Sandbox Code Playgroud) 我正试图在Android上制作一个Snake游戏,其中蛇用滑动手势移动.
我已经尝试了很多方法来完成这项工作,但它们似乎都不适合我.我没有实现一个视图 - 这会有问题吗?
这是我尝试基于之前的StackOverflow问题实现的示例 - Android:如何处理从右到左的滑动手势.
我按照指示创建了OnSwipeTouchListener.java.然而,我遇到了一些使用问题.
在GameScreen.java(这是所有触摸事件发生的地方)中,我将此作为示例添加 -
onSwipeTouchListener = new OnSwipeTouchListener() {
public void onSwipeTop() {
Toast.makeText(MyActivity.this, "top", Toast.LENGTH_SHORT).show();
}
public void onSwipeRight() {
Toast.makeText(MyActivity.this, "right", Toast.LENGTH_SHORT).show();
}
public void onSwipeLeft() {
Toast.makeText(MyActivity.this, "left", Toast.LENGTH_SHORT).show();
}
public void onSwipeBottom() {
Toast.makeText(MyActivity.this, "bottom", Toast.LENGTH_SHORT).show();
}
};
imageView.setOnTouchListener(onSwipeTouchListener);
Run Code Online (Sandbox Code Playgroud)
这会导致出现一堆错误(主要涉及imageView),并且都无法解析.
有没有人碰巧有一个替代的滑动实现特定于我的情况?
user-interface android gesture-recognition swipe android-view
我有一个3x3网格视图.想象一下如下.
1 2 3
4 5 6
7 8 9
Run Code Online (Sandbox Code Playgroud)
现在我想要达到什么目标
我希望网格视图列在触摸时向上和向下移动.
考虑一下网格视图的第一列.那是
1
4
7
Run Code Online (Sandbox Code Playgroud)
现在,如果我触摸此列的任何位置,可以在1或4或7上触摸,然后向上或向下滑动任何一个方向.然后我想将列移动1或2个位置.
让我明白一下
如果我通过触摸7向上滑动它应该是这样的结果
1
4 2 3
7 5 6
8 9
Run Code Online (Sandbox Code Playgroud)
或者,如果我触摸第二列并将其向下移动,那么它将如下所示
1 3
4 2 6
7 5 9
8
Run Code Online (Sandbox Code Playgroud)
如果我移动2个网格单元格的列,那么它看起来就像
1 3
4 6
7 2 9
5
8
Run Code Online (Sandbox Code Playgroud)
对于每一列,我应该能够将列移动一个或两个单元格,具体取决于我滚动列的数量.
还有一件事如果我将列滚动得很小并且如果它不是完全适合任何网格单元到所需位置那么它应该自动适合接近适合位置的网格单元.
我在这里搜索了太多关于堆栈溢出的问题并查询谷歌批次.但我没有得到我想要的东西.
如果我没有解释好,请告诉我.我会尝试解释更多.任何想法,任何提示或任何技巧都是值得的.
编辑
如果我移动列超过3个网格然后释放触摸,则列将仅移动到两个元素.像这样
1 3
4 6
7 2 9
5
8
Run Code Online (Sandbox Code Playgroud)
任何开始的想法都会很明显
谢谢
我正在尝试为我用 Kotlin 编写的应用程序实现一个手势检测器。我正在关注这个问题的评论:链接
所以,我创建了 OnSwipeTouchListener 类并在我的类中实现了监听器:
class DetailActivity : AppCompatActivity() {
override fun onBackPressed() {
super.onBackPressed()
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.detail_activity)
window.decorView.setOnTouchListener(object: OnSwipeTouchListener(this@DetailActivity) {
override fun onSwipeLeft() {
onBackPressed()
}
override fun onSwipeRight() {
onBackPressed()
}
})
}
Run Code Online (Sandbox Code Playgroud)
问题是它没有被识别,我也没有收到任何错误。我试图放置一个 Log.i 来检查程序是否进入了两个覆盖方法,但没有打印任何内容。会不会是视图问题?
编辑:这是侦听器代码:
open class OnSwipeTouchListener(ctx: Context) : OnTouchListener {
private val gestureDetector: GestureDetector
companion object {
private val SWIPE_THRESHOLD = 100
private val SWIPE_VELOCITY_THRESHOLD = 100
}
init {
gestureDetector = GestureDetector(ctx, GestureListener())
} …Run Code Online (Sandbox Code Playgroud)