自 Flutter 2.5 发布以来,触摸手势不再起作用(例如使用 ScrollViwes 或 Tabs)。我没有在 Android / IOS 上进行测试,因为我当时没有为这些平台开发,但我认为默认情况下它只是在 PC 平台上禁用,但我找不到任何关于此的资源,也不知道如何开启它!(我在具有多个独立项目的两个独立工作站上遇到了同样的问题,在调试和发布中)
例子:
void main() {
runApp(
MaterialApp(
home: Scaffold(
body: ListView.builder(
itemBuilder: (buildContext, index) => ListTile(
title: Text("test " + index.toString()),
),
),
),
),
);
}
Run Code Online (Sandbox Code Playgroud) 我想在同一视图中使用拖动和点击手势。
Canvas(
modifier = Modifier
.fillMaxSize()
.pointerInput(Unit) {
detectTapGestures(
onDoubleTap = {
Log.i("Double Tap","Clicked")
}
)
detectDragGestures { change, dragAmount ->
change.consumeAllChanges()
dragAmountX = dragAmount.x
dragAmountY = dragAmount.y
}
}
)
Run Code Online (Sandbox Code Playgroud)
我尝试了这种方法,但只有点击手势有效。如何在视图中同时使用点击和拖动手势?
我有一个MFC应用程序,用户必须在一个圆形会议周围移动鼠标,拖动一个mouvement.我需要在鼠标拖动"旋转"期间检索度数,我需要知道它是顺时针还是逆时针.
首先,为了确定旋转方向,我正在比较当前鼠标位置和用户单击以启动拖动的鼠标位置之间的x坐标.这很有效,直到用户旋转超过180度.
我该如何处理圆圈的另一半?
我正在使用手势探测器来捕捉"啪啪"并使用视图鳍状肢在发生这种情况时更改屏幕.我的一些子视图包含列表视图.如果在列表视图上滑动,手势检测器将无法识别滑动.但它会识别它是否是文本视图或ImageView的.有没有办法实现它,以便即使它们位于另一个具有ClickListener的视图之上,它也能识别滑动?
我在后来的回答中被告知我必须将我在代码中创建的GestureOverlayView添加到我的视图层次结构中,而我不是100%如何做到这一点.以下是完整性的原始问题.
我希望我的游戏能够识别手势.我有一个很好的SurfaceView类,我在onDraw上绘制我的精灵,我有一个运行它的线程来调用onDraw等.
一切都很好.
我试图将GestureOverlayView添加到此,它只是无法正常工作.最后被黑客攻击它不会崩溃的地方,但这就是我所拥有的
public class Panel extends SurfaceView implements SurfaceHolder.Callback, OnGesturePerformedListener
{
public Panel(Context context)
{
theContext=context;
mLibrary = GestureLibraries.fromRawResource(context, R.raw.myspells);
GestureOverlayView gestures = new GestureOverlayView(theContext);
gestures.setOrientation(gestures.ORIENTATION_VERTICAL);
gestures.setEventsInterceptionEnabled(true);
gestures.setGestureStrokeType(gestures.GESTURE_STROKE_TYPE_MULTIPLE);
gestures.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT));
//GestureOverlayView gestures = (GestureOverlayView) findViewById(R.id.gestures);
gestures.addOnGesturePerformedListener(this);
}
...
...
onDraw...
surfaceCreated(..);
...
...
public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
ArrayList<Prediction> predictions = mLibrary.recognize(gesture);
// We want at least one prediction
if (predictions.size() > 0) {
Prediction prediction = predictions.get(0);
// We want at least some confidence …Run Code Online (Sandbox Code Playgroud) #square我的iOS设备上的视口中有一个垂直和水平居中的蓝色...
<div id="square"></div>
#square {
width:100px;
height:100px;
background:blue;
margin:0 auto;
}
Run Code Online (Sandbox Code Playgroud)
我想在手机上进行捏合/缩放手势时,在最小值和最大值范围内调整大小.
现在,这是我正在使用的所有JavaScript.
$(document).ready(function() {
var dom = document.body,
_width = parseInt($('#square').css('width')),
vel = 3,
min = _width,
max = 300,
scale;
dom.addEventListener("gesturechange", gestureChange, false);
function gestureChange(e) {
e.preventDefault();
scale = e.scale;
_width = Math.round(_width*(scale/vel));
if ( _width <= max && _width >= min )
$('#square').css({
'width' : _width + 'px',
'height' : _width + 'px'
});
if ( _width > max ) _width = max;
if ( _width …Run Code Online (Sandbox Code Playgroud) 背景:
问题:
(因为,如果没有,唯一的另一个选择是分别为两个平台开发两个本机(和非浏览器)应用程序,对吗?)
在Chrome中的Macbook Pro上,在屏幕上滑动两根手指可以让您前后移动.我如何禁用此功能,并在jQuery或Javascript中创建自定义手势?
我真正需要知道的是你如何检测两个手指何时在触控板上,我认为这是最好的方法.您可以使用e.touches在移动设备上进行操作!
我正在Android APP中使用地图v2
我的地图每隔几秒自动更新一次,以在地图上显示一些新点.每次刷新时,自动执行以下事件:调用"setOnCameraChangeListener".
用户可以通过移动相机或进行缩放来与地图交互.我需要在地图上拦截用户的手势,例如"缩放","拖动","捏合打开"或"捏合".
所以我不能使用"OnCameraChangeListener",因为这已经在应用程序自动更新数据时自动完成,我无法理解事件发生时自动更新地图或何时通过用户交互
如何捕获这些用户手势?
根据android的培训,如果您扩展GestureDetector.SimpleOnGestureListener,并且false从onDown(...)的返回比其他方法GestureDetector.SimpleOnGestureListener永远都不会调用:
无论您是否使用GestureDetector.OnGestureListener,最佳实践都是实现一个返回true的onDown()方法。这是因为所有手势均以onDown()消息开头。如果从onDown()返回false,则默认情况下,如GestureDetector.SimpleOnGestureListener所做的那样,系统将假定您要忽略其余手势,并且永远不会调用GestureDetector.OnGestureListener的其他方法。这有可能在您的应用程序中引起意外问题。唯一应该从onDown()返回false的情况是,如果您确实要忽略整个手势。
但是,在我的简单测试onScroll(...)中被称为。
public void onCreate(Bundle savedInstanceState) {
mDetector = new GestureDetectorCompat(this, MyGestureListener);
}
public boolean onTouchEvent(MotionEvent event) {
mDetector.onTouchEvent(event);
return true;
}
class MyGestureListener extends GestureDetector.SimpleOnGestureListener {
private boolean scrollEvent;
@Override
public boolean onDown (MotionEvent event) {
Log.v("GESTURE", "onDown ");
return false;
}
@Override
public boolean onScroll (MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
Log.v("GESTURE", "onScroll");
return true;
}
Run Code Online (Sandbox Code Playgroud)
另一个类似的问题是下一个定义,同样来自相同的android培训页面:
来自各个on方法的返回值true表示您已经处理了touch事件。返回值为false的事件将事件向下传递通过视图堆栈,直到成功处理触摸为止。
如何用之前的报价解决?
gesture ×10
android ×6
touch ×3
ios ×2
javascript ×2
jquery ×2
browser ×1
dart ×1
flutter ×1
layout ×1
mfc ×1
mouse ×1
multi-touch ×1
onmousemove ×1
rotation ×1
surfaceview ×1
swipe ×1
viewflipper ×1