我有一个包含ViewFlipper的Activity.ViewFlipper包含2个布局,这两个布局基本上只是ListView.
所以这里的想法是我有两个列表,从一个列表导航到另一个列表,我会使用水平滑动.
我有那个工作.但是,当滑动开始执行时,您的手指所在的列表项目,也会长按该项目.
这是我的相关代码:
public class MyActivity extends Activity implements OnItemClickListener, 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 mGestureDetector;
View.OnTouchListener mGestureListener;
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) …Run Code Online (Sandbox Code Playgroud) 更具体的我在哪里附加,OnGestureListener以便
我可以onSingleTapUp在屏幕上的任何地方检测到,
即使ImageView占据屏幕的一半.
现在我在Activity上有一个带有ImageView的Listener.
但是当我在ImageView外部单击时,Listener才会触发.
我阅读并尝试理解这一点,但无法做到正确.
此代码位于Activity中.
public boolean onSingleTapUp(MotionEvent e) {
//addtext.setText("-" + "SINGLE TAP UP" + "-");
//Log.d(TAG, "- + SINGLE TAP UP + - ***********************************************************************");
int btnsize = buttonSave.getHeight();
int viewWidth = display.getWidth();
int viewHeight = display.getHeight();
// RIGHT SIDE SCREEN
if(e.getX()> (viewWidth*0.7)){
Log.d(TAG, "RIGHT SIDE");
if(e.getY()> viewHeight*0.7){
Log.d(TAG, "right down on screen");
}else if(e.getY()> (viewHeight*0.45)){
Log.d(TAG, "right middle on screen ");
}
}
// LEFT SIDE SCREEN
if(e.getX()< (viewWidth*0.3)){
Log.d(TAG, …Run Code Online (Sandbox Code Playgroud) 我有一个RelativeLayout,中间有一个TextView.我已经使用SimpleOnGestureListener()来检测onFling,onDown和onScroll事件.
我希望TextView能够在屏幕上跟随我的手指(可以只是在x轴上),当我抬起手指时,它会从屏幕上移动或者回到中间(取决于我有多远)感动它).
我在onTouch中使用GestureDetector进行了一项活动.在我的布局中,我还有一个实现onClickListener的视图.在Android ICS上,我在处理TouchEvent时遇到NullPointerException.这个错误的原因是什么?我看过几篇帖子说onClick和onTouch不能很好地结合在一起,但是当看到这个错误时,没有真正的原因解释或问题的真正解决方案.
这是代码:
public class FlipCardActivity extends Activity implements
View.OnClickListener, View.OnTouchListener {
protected GestureDetector gestureDetector;
protected class TouchSwipeListener extends GestureDetector.
SimpleOnGestureListener {
@Override
public boolean onDown(MotionEvent e) {
return false;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// Calculate dx, gradient, velocity, etc
// Check for and discard unacceptable swipes
if (Math.abs(gradient) > SWIPE_MAX_GRADIENT || Math.abs(distance) <
SWIPE_MIN_DISTANCE || Math.abs(velocity) < SWIPE_MIN_VELOCITY)
return false;
// Determine whether it's a left or a right swipe …Run Code Online (Sandbox Code Playgroud) 我有一个堆栈,里面有两个小部件。我正在尝试检测对堆栈底部小部件的点击,该小部件位于顶部小部件的后面。
我正在使用HitTestBehavior.translucent,但只有在GestureDetector没有任何孩子的情况下它才有效。
这是我的应用程序中所需内容的简化版本。我有一个堆栈,其中包含屏幕上的许多小卡片,并且在它们之上有一张画布。尽管有画布,我仍然需要能够点击卡片来更改其内容。我认为使用半透明行为可以解决我的问题,但事实并非如此。
编辑:另外,第一个GestureDetector总是在Positioned小部件中。
class TestPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: SizedBox(
height: 800,
width: 400,
child: Stack(
children: [
/// 2. ... and trigger the onTap function of this widget
GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () {
print('TAP BOTTOM');
},
child: Container(
height: 500,
width: 400,
color: Colors.deepOrange,
),
),
/// 1. I'm Trying to clic here...
GestureDetector(
behavior: HitTestBehavior.translucent,
onTap: null,
child: Container( …Run Code Online (Sandbox Code Playgroud) 你好SimpleOnGestureListener不能在我的应用程序中工作这就是我实现它的方式.也许你可以发现什么是错的.事情是调试显示应用程序永远不会进入onFling(...)方法和gdt.onTouchEvent(事件); 总是返回false:/任何想法?谢谢
我的活动课
public class SimpleActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.simpleLayout);
final ImageView imageView = (ImageView) findViewById(R.id.gggbbb);
imageView.setOnTouchListener(new OnFlingGestureListener() {
@Override
public void onTopToBottom() {
System.out.println("top");
}
@Override
public void onRightToLeft() {
System.out.println("right");
}
@Override
public void onLeftToRight() {
System.out.println("left");
}
@Override
public void onBottomToTop() {
System.out.println("bottom");
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
我的抽象听众
package com.dmd.client.detailsMenus;
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
public abstract class OnFlingGestureListener implements OnTouchListener {
private final GestureDetector gdt …Run Code Online (Sandbox Code Playgroud) 一个附接的挑战GestureDetector到ListPreference是2倍:
是否可以将GestureDetector附加到ListPreference?
如果是这样,怎么会这样呢?我在哪里编写代码来实例化GestureDetector并实现监听器?
GestureDetector Class和GestureDetectorCompat类有什么区别?两者都做同样的事情(处理手势),但我应该使用哪一个?
我错过了什么吗?文档说事件从最里面的孩子冒泡到祖先,但下面的代码不会打印“拖动”到控制台。不过,它确实打印了“点击”。将 NeverScrollablePhyiscs 应用于 ListView 确实有效,但我想在两个级别上监听事件。将 HitTestBehavior.translucent 应用于 GestureDetector 不会改变任何东西。
import "package:flutter/material.dart";
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: GestureDetector(
onVerticalDragUpdate: (DragUpdateDetails details) {
print("dragged");
},
onTap: () {
print("tapped");
},
child: ListView.builder(
itemBuilder: (context, index) {
return Container(
padding: EdgeInsets.all(20.0),
child: Text(
"The GestureDetector above me does not react to drag events. Maybe …Run Code Online (Sandbox Code Playgroud) 我对 flutter 非常陌生,正在尝试找出如何在 CustomPaint 路径上检测到手势。我可以单击许多其他内容,但由于某种原因不能单击路径...我该如何让它工作?到目前为止我的代码如下。
import 'package:flutter/material.dart';
void main() => runApp(MbiraShapes());
class MbiraShapes extends StatefulWidget {
@override
_MbiraShapesState createState() => _MbiraShapesState();
}
class _MbiraShapesState extends State<MbiraShapes>{
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Mbira Shapes',
home: PathExample());
}
}
class PathExample extends StatelessWidget {
@override
Widget build(BuildContext context) {
return CustomPaint(
painter: KeyPathPainter(),
);
}
}
class KeyPathPainter extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
Paint lineDrawer = Paint()
..color = Colors.blue
..strokeWidth = 8.0;
Path …Run Code Online (Sandbox Code Playgroud)