- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我是 Android 和 Java 编程的新手,能够在这里找到很多解决我的许多问题的方法。然而,我发现自己现在陷入困境,没有在网上找到任何解决方案。
我编写了一个简单的应用程序,它在我的 MainActivity 的 onCreate 方法中创建了一个 onTouchListener。 info() 启动一个新的 InfoActivity。
如果我终止我的应用程序并重新启动它,当我第一次触摸信息 ImageView 时,我会看到快速连续的 ACTION_DOWN 和 ACTION_UP,并且新的 InfoActivity 会快速打开。
但是,如果我通过最小化它或访问 InfoActivity 并返回(使用 finish())来恢复 MainActivity,现在我注意到 ACTION_DOWN 和 ACTION_UP 事件之间有大约 2000 毫秒的巨大延迟。新 Activity 也以同样的方式延迟,即使我像此处的代码一样在 ACTION_DOWN 情况下移动 info() 调用也是如此。
据我所知,在那两秒的延迟期间没有发生任何事情。
请回复我如何更好地解决此问题的方法。我意识到可能有一种简单的方法可以找出答案,但我确实花了数小时进行搜索,但我尝试的任何方法都没有让我更接近解决方案。
最好的问候
朱利叶斯
info = (ImageView) findViewById(R.id.info);
info.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
switch (arg1.getAction()) {
case MotionEvent.ACTION_DOWN: {
Log.i("MOTION_EVENT","ACTION DOWN");
info.setImageResource(R.drawable.infoback);
info();
Log.i("MOTION_EVENT","ACTION INFO");
break;
}
case MotionEvent.ACTION_CANCEL:{
Log.i("MOTION_EVENT","ACTION CANCEL");
info.setImageResource(R.drawable.info);
break;
}
case MotionEvent.ACTION_UP: {
Log.i("MOTION_EVENT","ACTION UP");
info.setImageResource(R.drawable.info);
break;
}
}
return true;
}
});
Log.i("TIMESTAMP","End onCreate");
这是启动应用程序的日志,打开 infoActivity,关闭 infoActivity,然后再次尝试这样做,遇到减速。
06-29 02:12:12.529 15856-15856/de.juliusbier.shamebell I/TIMESTAMP﹕ Start onCreate
06-29 02:12:13.083 15856-15856/de.juliusbier.shamebell E/MediaPlayer﹕ Should have subtitle controller already set
06-29 02:12:13.083 15856-15856/de.juliusbier.shamebell I/TIMESTAMP﹕ End onCreate
06-29 02:12:13.084 15856-15856/de.juliusbier.shamebell I/TIMESTAMP﹕ Start onResume
06-29 02:12:13.084 15856-15856/de.juliusbier.shamebell I/SHAKER﹕ RESUME
06-29 02:12:13.084 15856-15856/de.juliusbier.shamebell I/TIMESTAMP﹕ End onResume
06-29 02:12:13.089 15856-15877/de.juliusbier.shamebell D/OpenGLRenderer﹕ Use EGL_SWAP_BEHAVIOR_PRESERVED: true
06-29 02:12:13.092 15856-15856/de.juliusbier.shamebell D/Atlas﹕ Validating map...
06-29 02:12:13.099 15856-15856/de.juliusbier.shamebell E/MediaPlayer﹕ Should have subtitle controller already set
06-29 02:12:13.128 15856-15877/de.juliusbier.shamebell I/Adreno﹕ EGLInit: QTI Build: 01/29/15, 1bccc5d, I0ba6dce82d
06-29 02:12:13.138 15856-15877/de.juliusbier.shamebell I/OpenGLRenderer﹕ Initialized EGL, version 1.4
06-29 02:12:13.144 15856-15877/de.juliusbier.shamebell D/OpenGLRenderer﹕ Enabling debug mode 0
06-29 02:12:20.480 15856-15856/de.juliusbier.shamebell I/MOTION_EVENT﹕ ACTION DOWN
06-29 02:12:20.521 15856-15856/de.juliusbier.shamebell I/MOTION_EVENT﹕ ACTION INFO
06-29 02:12:20.557 15856-15856/de.juliusbier.shamebell I/MOTION_EVENT﹕ ACTION UP
06-29 02:12:20.563 15856-15856/de.juliusbier.shamebell I/INFO﹕ Start onCreate
06-29 02:12:20.578 15856-15856/de.juliusbier.shamebell I/INFO﹕ Finish onCreate
06-29 02:12:24.992 15856-15856/de.juliusbier.shamebell I/TIMESTAMP﹕ Start onResume
06-29 02:12:24.993 15856-15856/de.juliusbier.shamebell I/SHAKER﹕ RESUME
06-29 02:12:24.993 15856-15856/de.juliusbier.shamebell I/TIMESTAMP﹕ End onResume
06-29 02:13:03.367 15856-15856/de.juliusbier.shamebell I/MOTION_EVENT﹕ ACTION DOWN
06-29 02:13:03.375 15856-15856/de.juliusbier.shamebell I/MOTION_EVENT﹕ ACTION INFO
-----------------------------Here comes the delay-------------------------------------
06-29 02:13:05.540 15856-15856/de.juliusbier.shamebell I/MOTION_EVENT﹕ ACTION UP
06-29 02:13:05.542 15856-15856/de.juliusbier.shamebell I/INFO﹕ Start onCreate
06-29 02:13:05.551 15856-15856/de.juliusbier.shamebell I/INFO﹕ Finish onCreate
更新:删除 setImageResource 调用解决了这个问题,在我看来,绘图以某种方式延迟,并且在处理完所有 setImageResources 之前不会打开新 Activity 。
info = (ImageView) findViewById(R.id.info);
info.setImageResource(R.drawable.info_selector);
info.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
shaker.close();
Intent infoIntent = new Intent(getBaseContext(), InfoActivity.class);
startActivity(infoIntent);
}
});
使用 Rajesh Batth 的这段代码,我遇到了同样的问题。请注意,onClick(View v) 中的代码是我以前的 info() 方法。 shaker.close 在我根据 this post 的答案改编的抖动检测类中调用以下行:
mgr.unregisterListener(listener);
不关闭振动器,甚至完全取消振动检测都不会改变任何事情。
最佳答案
如果您在 info() 中执行任何耗时的操作,则可能会发生这种情况。另外看代码感觉可以用onClickListener和selector drawable来实现需求。样本选择器就像这样。信息选择器.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:state_pressed="true" android:drawable="@drawable/infoback"/>
<item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/infoback"/>
<item android:state_focused="true" android:drawable="@drawable/infoback"/>
<item android:state_focused="false" android:state_pressed="false" android:drawable="@drawable/info"/>
</selector>
Activity 中
info = (ImageView) findViewById(R.id.info);
info.setImageResource(R.drawable.info_selector);
info.setOnClickListener(new OnClickListener(){
public void onClick(View v){
info();
}
});
关于java - Android onTouchListener Action_Up-MotionEvent 在第一次恢复后延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31106056/
你好 我在我的应用程序中为 ImageView 设置了一个 onTouchListener,我的目标是拥有一个 ImageView,用户可以在应用程序中四处拖动并放置他们想要的任何位置。 我已经使用在
我正在开发一个钢琴应用程序,它不是最好的,但它是一个开始。 我使用下面的代码来播放声音并通过触摸事件更改按钮的图像。 C4.setOnTouchListener(new View.On
请看下面的代码 XML 代码 Java 代码 package k.k; import java.util.ArrayList; import
对于我正在开发的应用程序,我需要使用 OntouchListeners,以便按钮的透明区域不可单击,但这引发了我没有预料到的问题。当我按下按钮时,每次都会存储多个值。 这是我的代码: private
我正在开发一个名为 CanvasView 的自定义 View 。这个 View 允许我在 onDraw 方法之外在其上绘制内容。它是这样的: public class CanvasView exten
好的,伙计们,好吧...,好像我在上一个问题中错了... 我正在开发一个单词搜索游戏,我已经将我的应用程序实现的“视点”从 GridView 更改为在 android 中使用 Canvas 绘制位图。
我有一个附加了 onTouchListener 的文本字段。当我触摸文本时,ACTION_DOWN 被触发,文本从默认的白色变为黑色。然后我取消触摸 ACTION_UP 被触发,文本变回白色。 但是现
最初我通过 XML 将我的按钮连接到一个方法,如下所示: 然后我决定添加一个 onTouchListener 以便我可以处理 ACTION_UP 事件: private OnTouc
代码: public class ImageActivity extends FragmentActivity { ImageView mClickedImage; PhotoView
brown = (Button) findViewById(R.id.brownButton); brown.setOnTouchListener(new OnTouchListener()
我制作了一个自定义 View ,它具有 OnTouchEvent(MotionEvent event) 方法。这使得 View 在按下时改变颜色。 我还为我的 Activity 实现了一个 OnTou
我想创建自己的 OnTouchListener。然后我想将它封装到一个 .jar 文件中以使其可重用。 这是我的特定 OnTouchListener: public class TouchableVi
我正在尝试在 spinner 上设置 OnTouchListner。能够在自定义 View 上调用它,但不能在微调器上调用。 还尝试使用 MotionEvent.ACTION_DOWN。代码不适用于
Falks,这将是一个愚蠢的错误,但我真的猜不出它在哪里。 我正在尝试设置 OnTouchListener,但未调用方法 onTouch。 这是我的代码: public class StepA
我对 OnTouchListener 有疑问。我创建了一个自定义按钮。此按钮与 onClick 事件 一起正常工作。但它不适用于 onTouch 事件 这是我的自定义按钮。我只想要按钮和按钮按下这两个
我正在创建一个像 Facebook 聊天头一样的小弹出窗口。 气泡启动并出现,但 ontouchlistener 没有响应 ontouch 事件做了我测试时应该做的事情,但当我集成它时,它没有触发 下
我有一个 OnTouchListener,但是当我实际测试我的程序并触摸屏幕时,显示的颜色不是应有的颜色。我使用颜色 block 进行了测试,它可以工作,但是坐标仍然关闭,如果您在一种颜色上触摸得太远
我的图像移动得很奇怪,并且在我需要它保持连续的时候随机暂停。它停止然后工作。如果您可以提高效率,请发帖。还要看看是否有办法缩短代码。 import android.support.v7.app.App
我有一个按钮(代码中的变量 theButton),并且希望能够将它拖到它的父 View 周围。这是它的 OnTouchListener: OnTouchListener touchBListe
您好,我构建了一个具有根相对布局 View 的应用程序。我试图设置一个触摸监听器以在用户触摸屏幕时返回,但它似乎没有触发,我不知道我哪里出错了。我在网上搜索和查看,但据我所见,似乎每个人都使用与我相同
我是一名优秀的程序员,十分优秀!