首页 > 解决方案 > ImageView 在其可绘制对象之间闪烁

问题描述

我有一个具有不同图形元素(ImageViews)的 android 应用程序。有些 ImageView 可以通过按下它们来改变,然后它们会显示另一个图形。我有两个系统,我的问题是一样的。

在第一种情况下,我将两个 ImageView 层叠在一起,然后我调用它们中的每一个并以编程方式设置它们的可见性。在第二种情况下,我使用函数“setImageResource”并在不同的可绘制对象之间进行更改。

在这两种情况下,我都有一个问题,即应用程序似乎经常“打嗝”,并且在瞬间为每个具有图形替代项的元素显示错误的“其他”图形元素。它会在一瞬间显示错误的图形,然后跳回正确的图形。

我在网上找不到任何关于此的信息,这里的任何人都认识到这个问题或对问题可能是什么有任何线索?

相关代码:

public void setLight1(int bo) // changes a graphical element by drawable
{
    ImageView vw = (ImageView) findViewById(R.id.light_1);

    if (bo > 0)
        vw.setImageResource(R.drawable.lampaljus);
    else
        vw.setImageResource(R.drawable.lampaslockn);
}

private void setStickMid(int stick) // changing between two layered imageViews
{
    switch (stick)
    {
        case 1:
            ImageView vw_1 = (ImageView) findViewById(R.id.stick_1_up);
            vw_1.setVisibility(View.INVISIBLE);
            ImageView vw_2 = (ImageView) findViewById(R.id.stick_1);
            vw_2.setVisibility(View.VISIBLE);
            break;
    // the rest of the switch statement omitted, just more of the same 

标签: javaandroidimageviewdrawableflicker

解决方案


在我的头顶上,试试这些:

  1. 将所有findViewById代码移至onCreate您的活动,以避免多次调用它。

  2. 资产有多大R.drawable.lampaljusR.drawable.lampaslockn以及其他维度是明智的。因为尝试加载高分辨率绘图,尤其是 PNG,会占用大量内存。

但是我可以提供一个更好的解决方案,如果你可以发布整个xmlActivity/Fragment代码。


推荐阅读