你好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并实现监听器?
在带有Android 4.0.4的三星Galaxy Note 10.1上,当两根手指放在屏幕上时GestureDetector它不会触发OnGestureListener#onScroll(它只用于一根手指).这适用于其他设备.在我的应用程序中,我想只在涉及至少两个手指时启用滚动.
这是重现现象的视图实现:
public class MyView extends View {
GestureDetector scrollGestureDetector;
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
scrollGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onScroll(final MotionEvent e1, final MotionEvent e2, final float distanceX, final float distanceY) {
System.out.println("SCROLL " + distanceX + ", " + distanceY);
return true;
}
});
}
@Override
public boolean onTouchEvent(MotionEvent event) {
scrollGestureDetector.onTouchEvent(event);
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
这种行为是已知/记录/想要的吗?有没有已知的解决方法?
我编写了一些代码来实现Gallery小部件的垂直滑动.它在Android 1.5和1.6中运行良好但在Android 2.2中不起作用(我还没有尝试使用2.1).
public class SwipeUpDetector extends SimpleOnGestureListener
implements OnTouchListener
{
private GestureDetector m_detector;
public SwipeUpDetector()
{
m_detector = new GestureDetector(m_context, this);
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
{
if (Math.abs(e1.getX() - e2.getX()) < s_swipeMaxOffPath &&
e1.getY() - e2.getY() >= s_swipeMinDistance &&
Math.abs(velocityY) >= s_swipeMinVelocity)
{
int pos = m_gallery.pointToPosition((int)e1.getX(), (int)e2.getY());
startAnimation(pos);
return true;
}
return false;
}
@Override
public boolean onTouch(View v, MotionEvent event)
{
return m_detector == null ? false : m_detector.onTouchEvent(event); …Run Code Online (Sandbox Code Playgroud) 我想将GestureDetector类添加到我的webview中,以便我可以管理常见的手势,例如doubletap.
这是我试图完成的事情:
关于DoubleTap - 有问题的网站有源代码,用于定义如何处理某些项目的单击和双击.它声明单击一次选择一个项目,双击打开该项目.我必须对这些项目含糊不清,因为它不是公共网站.
我不需要配置flings或swipes.我只想重新创建PC鼠标单击和双击.
编辑: 我在Pat的下面的建议中添加了.我根据自己的喜好改变了一些东西,并从其他来源添加了一些东西.
我使用这个问题来帮助构建我的活动以及Pat的帮助.使用"First Way"代码,它正确加载我的应用程序并成功重新加载页面.现在,我只需要添加其他事件处理程序并正确配置它们.当我开始工作时会发布最终代码,我会将Pat的答案标记为正确.
该用户提出相同的问题,没有回答: 如何使双击工作.
它说这是折旧的GestureDetector(新的MyGestureDetector()); - 我应该解决这个问题吗?
编辑2:由于问的实际问题是如何将webdetecor添加到webview,我能够做到这一点,我会将Pat的答案标记为正确.即使我确实想要doubleTap =双击,我也没有在我的标题中问这个,所以我会为此创建一个新问题.
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.webkit.SslErrorHandler;
import android.net.http.SslError;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.GestureDetector;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.MotionEvent;
public class MainActivity extends Activity{
WebView webview;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webview = (WebView) findViewById(R.id.webview);
//Do we want/need to enable Java?
webview.getSettings().setJavaScriptEnabled(true);
//Here we allow for zoom controls - …Run Code Online (Sandbox Code Playgroud) 我使用onTouchListener和手势检测器创建了一个自定义组件,我将自定义组件放在MainActivity的xml文件中,该文件同时包含onTouchEvent和手势检测器.我想检测自定义组件上的单个点击并长按MainActivity,但似乎触摸侦听器在某种程度上相互作用并且从未检测到单个点击.
MainActivity.java:
public class MainActivity extends ActionBarActivity {
private GestureDetector detector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
detector = new GestureDetector(this, new LongPressDetector());
}
@Override
public boolean onTouchEvent(MotionEvent event) {
detector.onTouchEvent(event);
int action = event.getActionMasked();
switch (action){
case MotionEvent.ACTION_DOWN:{
Log.d("TouchEvent", "Action_Down at MainActivity.java");
break;
}
}
return super.onTouchEvent(event);
}
private class LongPressDetector extends GestureDetector.SimpleOnGestureListener{
@Override
public boolean onDown(MotionEvent e) {
Log.d("TouchEvent", "onDown at MainActivity.java");
return super.onDown(e);
}
@Override
public void onLongPress(MotionEvent e) {
Log.d("TouchEvent", "onLongPress at MainActivity.java");
super.onLongPress(e); …Run Code Online (Sandbox Code Playgroud) 有没有更好的方法来检查#flutter中的左/右拖动.我已经完成了它,但是有时它不工作.
new GestureDetector(
onHorizontalDragEnd: (DragEndDetails details) {
print("Drag Left - AddValue");
setState((){
_value++;
});
if (details.velocity.pixelsPerSecond.dx > -1000.0) {
print("Drag Right - SubValue");
setState((){
_value--;
});
}
},
child: new Container(
child:new Text("$_value"),
),
);
Run Code Online (Sandbox Code Playgroud) 编辑:我尝试将 包装Container在Material小部件中并将颜色属性移动到Material小部件,但我将一堆ResourceCards水平放置ListView,,因此小部件中的颜色Material似乎只填充ResourceCard.
我ResourceCard在 Flutter 中创建了自己的小部件。我用 a 包裹它来GestureDetector检测点击,但我想显示某种反馈或效果来通知用户它被点击了。GestureDetector我决定用小部件替换InkWell,但我没有通过容器的线性渐变和颜色看到飞溅效果,所以我只是将其恢复为GestureDetector. 我看过其他具有潜在解决方法的帖子,但它们都不能使用线性渐变和颜色。其中一个ResourceCard小部件如下所示: https: //i.stack.imgur.com/N2txv.jpg。这是小部件的代码:
class ResourceCard extends StatelessWidget {
ResourceCard({
@required this.colour,
@required this.margin,
@required this.cardText,
this.onPress,
@required this.cardCaption,
@required this.paddingText,
});
final Color colour;
final String cardText;
final Function onPress;
final EdgeInsets margin;
final String cardCaption;
final EdgeInsets paddingText;
@override
Widget build(BuildContext context) {
return GestureDetector( …Run Code Online (Sandbox Code Playgroud) 如果我有一个GestureDetector具有内部的探测器,GestureDetector我该如何设置它以便两个探测器都能接收到点击事件?
您可以在此处查看运行代码: https://dartpad.dev/37807a51a48e52eda81c24cf67260c33
GestureDetector(
onTap: () => print("Log 1"),
child: GestureDetector(
onTap: () => print("Log 2"),
child: Text("CLICK ME")
)
);
Run Code Online (Sandbox Code Playgroud)
每次我单击它打印的文本Log 2。
我已经尝试过设置HitTestBehavior.traslucent和所有这些,但没有成功。
我想要它打印Log 1并Log 2
我正在创建某种图像编辑器(有点像 Canva)。对于放大、缩小和平移,我使用InteractiveViewer. 但问题是,一旦我开始使用InteractiveViewer,我注意到画布内元素的其他手势(例如,点击并拖动元素应该拖动元素)不起作用。点击和拖动现在变成了平移整个画布。
即使我关闭平移和缩放,情况仍然如此(panEnabled: false, scaleEnabled: false)。值得庆幸的是,单击仍然有效,因为 InteractiveViewer 不使用它,但当用户进行不适合InteractiveViewer. 例如,如果用户点击某个元素使其被选中,则所有手势输入都应转到被点击的元素而不是InteractiveViewer。
我曾经想过一个解决方案,就是InteractiveViewer在选择一个元素时不使用,但这会导致用户立即失去之前设置的缩放和平移。我需要解决方案,以便 InteractiveViewer 可以保留缩放和平移设置,同时让所有手势输入传递到内部元素。我怎样才能做到这一点?
gesturedetector ×10
android ×6
flutter ×4
containers ×1
dart ×1
double-click ×1
interactive ×1
onfling ×1
scroll ×1
swipe ×1
webview ×1
widget ×1