【问题标题】:Android difference between using ImageResource and DrawableAndroid 使用 ImageResource 和 Drawable 的区别
【发布时间】:2016-01-08 02:50:29
【问题描述】:

我是 Android 开发的新手,我最初使用 SetImageResource 设置了供用户拖动的图形。但是在开发的后期,它没有我需要的方法,所以我后来使用 SetImageDrawable 来拖动图像并将它们放置在新的位置。

这两者之间的核心区别是什么?我一直在网上寻找,但仍然不确定这些关键差异以及它们将如何影响我的计划。

我如何使用 setImageResource 在视图上设置图像的示例:

case 'J':
    if (tempFlip[9]) {
        GameBoardImages[k].setImageResource(temp[9]);
    } else {
        temp[9] = symbolTilesID[k];
        tempFlip[9] = true;
        GameBoardImages[k].setImageResource(symbolTilesID[k]);
    }
    break;

然后我如何使用 setImageDrawableOnDragListener 中设置它:

target = GameBoardImages[ImageNumber]; //Spot getting dragged to

dragged = (ImageView) myDragEvent.getLocalState(); //Dragging item

target_draw = target.getDrawable();
dragged_draw = dragged.getDrawable();

dragged.setImageDrawable(target_draw);
target.setImageDrawable(dragged_draw);

【问题讨论】:

    标签: android android-studio drawable android-drawable android-resources


    【解决方案1】:

    setImageResource() 方法接受一个可绘制资源 ID(它是一个 int)。

    PRO:您正在传递一个整数,这在内存方面非常小。如果在您调用 setImageResource() 之前有多个方法调用,它们可以轻松地绕过这个 int,而不会出现内存问题。

    CON:因为你传入的是一个整数,setImageResource() 方法必须执行位图读取和解码才能显示图像。该方法在 UI 线程上执行此操作,这可能会导致“延迟打嗝”,具体取决于图像的大小和设备的处理能力。这会导致您的用户在处理图像时在屏幕上看到延迟或有趣的行为。

    setImageDrawable() 方法接收实际的 Drawable 对象。

    PRO:您已经拥有实际的 Drawable,因此无需处理此数据以显示它。对于这种方法,您不会在屏幕上看到延迟问题。

    CON:这里的缺点是您最终可能会在其他方法之间传递一个drawable,以便访问它来进行setImageDrawable() 方法调用。大量传递 Drawable 对象并不是一个好主意,因为它们可能很大。

    【讨论】:

    • 感谢您提供的信息,这很有帮助。您是否也知道为什么我不能在没有可绘制对象的视图上设置可绘制图像?出于某种原因,它只允许我在另一个可绘制对象上执行此操作。如果您不这样做,那很好,我只是认为询问没有害处。问题是当我这样做时,我总是在视图上丢失一个可绘制的图像。再次感谢!
    • @Kio Krofovitch,你的回答在记忆方面没有意义。对象始终存储在堆中,并且只有整数引用在操作数堆栈中传递,因此在这方面使用资源标识符没有任何优势。此外,从资源中获取的图片也将成为可绘制对象。资源标识符只会让它变慢,因为它们涉及解析资源。然而,就 Android 资源而言,使用它们仍然是一种很好的做法。
    • @Kio Krofovitch,此外,在解码和显示图像时,屏幕上不会发生任何“有趣的行为”,至少在配备 GPU 并经过硬件加速的现代设备上更是如此。事实上,一旦图像被完全解码并存储在 RAM 中(确切地说是在堆中),它就会被复制到 GPU 内存并在下一次演示中立即渲染。这将发生在 Android 托管代码用于访问制造商编写的非托管驱动程序的一些 JNI 调用中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多