【问题标题】:Imagebutton slow changed to pressed stateImagebutton 慢变为按下状态
【发布时间】:2013-03-04 07:54:43
【问题描述】:

我有一个 ImageButton 并且我已经为它制作了一个选择器,所以当我按下 imagebutton 时,会显示另一个图像。但是当按下图像按钮时,似乎必须等待 1 秒才能更改图像。这对用户体验来说并不是很好。..

有没有可能解决这个问题?我已经查找了一些答案,但我现在不知道在哪里进行更改。

这是我的代码

选择器:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item
    android:state_pressed="true"
    android:state_enabled="true"
    android:drawable="@drawable/main_pressed" />
<item
    android:state_enabled="true"
    android:drawable="@drawable/main" />
</selector>

布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:background="@drawable/bg" >

    <ImageButton
          android:id="@+id/mainMosque"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_centerInParent="true"
          android:background="@null"
          android:contentDescription="@string/mainMosque"
          android:src="@drawable/main_btn_mosque" />

</RelativeLayout>

【问题讨论】:

  • 您在真实设备上或仅在模拟器上看到此行为?
  • 你的形象是不是很大?也许按下按钮需要 GC 运行。一些 logcat 输出会很有用。此外,您可以使用分析器运行您的应用程序并检查自己,是什么花费了这么多时间。
  • 它在一个真实的设备上,三星 Galaxy S3。 xhdpi 中的图像是 512x512,ldpi 中的图像是 192x192。如何使用 logcat 输出这些数据以及什么是分析器?

标签: android android-layout imagebutton android-image android-selector


【解决方案1】:

您可以使用 ImageView 代替 ImageButton,并使用 Glide 库将图像加载到视图中,这将提高应用程序的性能,您可以在此处阅读更多信息:https://github.com/bumptech/glide 希望这对你有用!

【讨论】:

    【解决方案2】:

    How can I make a Button more responsive?

    此链接提供了一些线索来说明导致此问题的原因,但是我没有成功实施答案。

    嗯...我通常扩展 Button 类并覆盖 onTouchEvent 方法

    public boolean onTouchEvent (MotionEvent event) 
    {
       if (event.getAction() == MotionEvent.ACTION_DOWN) 
       {
          setPressed(true);
       }
       return super.onTouchEvent(event);
    }
    

    【讨论】:

      【解决方案3】:

      我不确定这是否能解决问题,因为这对我来说确实是个新问题。但是你可以尝试以下方法

      <ImageButton
            android:id="@+id/mainMosque"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:background="@drawable/main_btn_mosque"
            android:contentDescription="@string/mainMosque"/>
      

      和 main_btn_mosque

      <?xml version="1.0" encoding="utf-8"?>
      <selector xmlns:android="http://schemas.android.com/apk/res/android">    
      <item
          android:state_pressed="true"
          android:drawable="@drawable/main_pressed" />
      <item
          android:drawable="@drawable/main" />
      </selector>
      

      selector 中它只是一个优化,默认情况下它是启用的。

      现在如果问题仍然存在。再尝试一件事。代替ImageButton 使用Button

      【讨论】:

      • 我用你的代码试过,也用按钮试过,但没有效果。尝试较小的图像也没有效果。我在某处读过它使用onpress(或点击不记得)而不是onTouch。你知道吗?
      • 您是否在 onClick 中执行任何昂贵的操作
      • 不,还没有任何逻辑,我一直在处理 xml 文件。我也在使用 Fragments 和 viewpager 水平滑动,但这不是问题
      • 奇怪..你可以测试一些其他的东西..比如删除图像,看看默认选择器是否工作正常..使用另一组图像..并且可能会从代码 onClick 更改图像
      • 在没有背景图片的情况下试过了,还是很慢。我会在模拟器上试一试,稍后我会回复你。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-23
      • 2011-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多