问题:
我有一个问题,在整个应用程序中使用单击事件。该应用程序将在移动设备和网络上使用。我正在使用 Angular 6。
每次您在桌面上的浏览器上单击按钮或链接时,第一次单击都会起作用,但在移动设备上,有时单击不起作用。如果我错了,请纠正我,但我相信人们将其称为幽灵点击。
我认为这是 300 毫秒的延迟,但我尝试使用 Hammerjs 的 Tap 并尝试使用 FastClick,似乎这不是问题。
我尝试在 html 中使用 touchstart 而不是 click/tap ,它似乎解决了这个问题。
有没有办法将 mousedown 和 touchstart 相互绑定?有没有办法在桌面上使用“单击/鼠标按下”而在移动设备上使用“触摸启动”?
我还可以采取哪些其他方法来解决这个问题?
阅读此event_touchcancel文档后:
当触摸事件被中断时,将发生 touchcancel 事件。
不同的设备会在不同的操作中中断触摸事件,如果发生此“错误”,最好包含此事件以清理代码。
和w3c event-touchcancel。我还是很困惑。
“当触摸事件被中断时”是什么意思?有没有什么特殊情况会中断触摸事件?touchcancel事件什么时候会被触发?
每次用户点击我的应用程序中的任何可点击视图时,我都需要跟踪一个事件。我一般都想这样做,例如在我的主要活动中。
我知道我可以覆盖onUserInteraction()或者dispatchTouchEvent()但是即使对于不可点击的视图的点击,这些也正在运行。
我不需要在可点击视图之间进行区分,只要它是可点击的就足够了。
在理想情况下,我还会将向上按钮与其他点击区分开来。
这可能吗?
我有应用程序,我需要onTouch滑动向上和向下事件.我已经在应用程序中实现了onTouch事件,但我没有任何关于Swipe Up和Swipe Down的想法是否有人有一个代码,我该怎么做?
final ImageView imageView = listOfImageView.get(i);
imageView.setOnTouchListener(new OnTouchListener () {
private float oldPosition;
public boolean onTouch(View view, MotionEvent event) {
if (event.getAction() == android.view.MotionEvent.ACTION_DOWN) {
this.oldPosition = event.getY();
}
}
});
Run Code Online (Sandbox Code Playgroud) 我一直在使用扩展视图处理一个非常简单的小应用程序.问题是我找不到我的onTouchEvent中的内容.我已经明白我要将压力点(x和y)与元素进行比较,看看它可能是哪一个.
但是......我已经宣布了一个矩形:
Paint color= new Paint();
color.setColor(Color.BLACK);
rectF = new RectF(0.0f, 0.0f, 1.0f, 0.5f) ;
canvas.drawRect(rectF, color);
Run Code Online (Sandbox Code Playgroud)
到目前为止这么好,但在onTouchEvent函数中
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction() ;
float x = event.getX() ;
float y = event.getY() ;
switch(action) {
case MotionEvent.ACTION_DOWN:
if(rectF().contains(x, y)) {
// Something should happen
}
}
invalidate();
return true ;
}
Run Code Online (Sandbox Code Playgroud)
我将rectF设置为0-1范围内的某种相对点,但是根据屏幕大小,X和Y从事件范围从0开始向上.
我可以轻松转换其中任何一个值吗?
编辑
以为有人对最终解决方案感兴趣......
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction() ;
float x = event.getX() ;
float y = event.getY() ; …Run Code Online (Sandbox Code Playgroud) 我已经完成了一个功能性Android游戏的编程,但我不知道在哪里修复触摸延迟:无论何时触摸屏幕,帧速率都会降低一半.我的代码基本上是带有onTouchEvent的LunarLander的复制和粘贴.
谷歌搜索向我展示了他们说工作但不做的基本解决方法(睡在onTouchEvent,onDispatchEvent,onInterceptTouchEvent,同步等),看起来在触摸事件期间没有使用SurfaceView是不可能的.
我该怎么办?我应该放弃SurfaceView,禁用onTouchEvent并使用clickListener,以某种方式阻止快速触摸调用?拜托,告诉我有什么不对!
我试过了:
这是我的代码:
public class Surface extends SurfaceView implements SurfaceHolder.Callback {
public CanvasThread canvasThread;
private SurfaceHolder surfaceHolder;
public Surface(Context context) {
super(context);
surfaceHolder = getHolder();
surfaceHolder.addCallback(this);
setFocusable(true);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return canvasThread.touch(event);
}
class CanvasThread extends Thread {
@Override
public void run() {
synchronized (this) {
// game logic
}
}
public boolean touch(MotionEvent event) {
// touch logic
}
}
}
Run Code Online (Sandbox Code Playgroud) 在视图上处理onTouchEvent非常简单,因为每个视图都有setOnTouchListener()方法来执行此操作.
唉,虽然ListPreference是一个视图,但它没有在布局XML中定义,因此无法通过findViewById()访问.所以...我似乎没有弄清楚如何为它设置setOnTouchListener().
我的想法是在PreferenceActivity的onCreate()中获得对它的引用,然后是getDialog().getCurrentFocus()但是在那个特定的时刻,它没有焦点,甚至没有对话框(getDialog()返回null,已确认).
知道如何解决这个问题吗?
android preferenceactivity ontouchlistener listpreference touch-event
我的问题很简单.我可以在DrawerLayout的内容菜单中使用HorizontalScrollView吗?我的DrawerLayout看起来像这样:
<android.support.v4.widget.DrawerLayout
android:id="@+id/pnlMenu"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<!-- Main content view -->
<ListView
android:id="@+id/lst"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:fastScrollEnabled="true"
android:focusable="true"
android:focusableInTouchMode="true"
tools:listitem="@layout/item_layout" >
</ListView>
<!-- Content of menu -->
<FrameLayout
android:id="@+id/drawerFrame"
android:layout_width="300dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:clickable="true"
android:background="@color/black" >
<fragment
android:id="@+id/frag"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.test.TestFragment" />
</FrameLayout>
</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)
在片段内部我有HorizontalScrollView但是当我尝试触摸它时没有任何事情发生,因为抽屉布局跟随我的手指.我认为禁用内容菜单中的触摸事件并仅在单击主内容视图时使DrawerLayout可关闭将解决我的问题.真的吗?如果没有,有人可以告诉我,我该怎么办?
谢谢.
我正在制作一个自定义日历视图,它扩展了LinearLayout并为每个日期提供了子视图.我想要做的是处理滑动和点击,你可以想象,滑动用于更改月份,点击用于选择日期和显示新活动.为此,我在CalendarView上使用GestureDetector,可以使其适用于滑动.但是为了处理点击事件,我不知道如何找到发生了点击的子视图.
以下是我的代码的一部分.
public class MonthView extends LinearLayout implements GestureDetector.OnGestureListener {
public MonthView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
gestureDetector = new GestureDetector(this);
initDateViews();
}
//other codes here
....
private void initDateViews() {
for(int i = 0; i < 42; i++) {
DateView view = new DateView();
//init date views and add to calendar view.
....
calendar.Add(view);
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
Logger.debug(TAG, ">>> MonthView.onTouchEvent()");
return gestureDetector.onTouchEvent(event);
}
@Override
public boolean OnSingleTapUp(MotionEvent event) …Run Code Online (Sandbox Code Playgroud) 我遵循此处的文档以在绘制时捕捉Pixelbook笔上按下的按钮,但是永远不会引发TOOL_TYPE_ERASER事件。当我尝试打印日志时,按住和释放按钮之间没有任何区别:
onTouchEvent:MotionEvent { action=ACTION_DOWN, actionButton=0, id[0]=0, x[0]=2010.4766, y[0]=778.10156, toolType[0]=TOOL_TYPE_STYLUS, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=1395185, downTime=1395185, deviceId=1, source=0x1002 }
2018-09-29 16:15:35.527 2926-2926/com. onTouchEvent:MotionEvent { action=ACTION_MOVE, actionButton=0, id[0]=0, x[0]=2009.2734, y[0]=777.6406, toolType[0]=TOOL_TYPE_STYLUS, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=4, eventTime=1395195, downTime=1395185, deviceId=1, source=0x1002 }
2018-09-29 16:15:35.552 2926-2926/com. onTouchEvent:MotionEvent { action=ACTION_MOVE, actionButton=0, id[0]=0, x[0]=2008.0703, y[0]=776.71484, toolType[0]=TOOL_TYPE_STYLUS, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=9, eventTime=1395221, downTime=1395185, deviceId=1, source=0x1002 }
2018-09-29 16:15:35.569 2926-2926/com. onTouchEvent:MotionEvent { action=ACTION_MOVE, actionButton=0, id[0]=0, x[0]=2007.8867, y[0]=776.25, toolType[0]=TOOL_TYPE_STYLUS, buttonState=0, metaState=0, flags=0x0, …Run Code Online (Sandbox Code Playgroud) touch-event ×10
android ×8
swipe ×2
angular ×1
canvas ×1
click ×1
dom ×1
dom-events ×1
drawerlayout ×1
html ×1
javascript ×1
mouseevent ×1
stylus-pen ×1
surfaceview ×1