使用ImageResource和Drawable

时间:2016-01-08 02:50:30

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

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

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

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);

1 个答案:

答案 0 :(得分:2)

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

PRO:你传入一个整数,这个内存非常小。如果在调用setImageResource()之前有多个方法调用,则可以轻松传递此int而不会出现内存问题。

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

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

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

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