gpt4 book ai didi

java - Android onTouchListener Action_Up-MotionEvent 在第一次恢复后延迟

转载 作者:太空狗 更新时间:2023-10-29 13:19:15 25 4
gpt4 key购买 nike

我是 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com