XML与setImageDrawable/setImageBitmap

Tho*_*alc 5 java android drawable android-layout

如果我预加载某些图像,在我的应用程序中是有利的.我这样做是正确的,在的AsyncTask,因为它是书面的正式文档.但是我有一个关于何时应该设置的问题/疑问.

我将展示代码片段.需要注意的是它简化了(他们的互操作性是我真正的代码更好,它会检查空值,等等).

让我们先看看原始(非预装)版本:

<ImageView
    android:id="@+id/imageViewMyGraphicalImageElement"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:scaleType="centerCrop" 
    android:src="@drawable/my_graphical_element" >
</ImageView>
Run Code Online (Sandbox Code Playgroud)

预加载版本具有以下XML(请注意缺少src属性):

<ImageView
    android:id="@+id/imageViewMyGraphicalImageElement"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:scaleType="centerCrop">
</ImageView>
Run Code Online (Sandbox Code Playgroud)

以及预装代码的片段:

sBitmap = bitmapBitmapFactory.decodeResource(context.getResources(), R.drawable.my_graphical_element, options); 
// 'sBitmap' is a Bitmap reference, while 'options' is BitmapFactory.Options
Run Code Online (Sandbox Code Playgroud)

最后,我设置它的地方:

setContentView(R.layout.main);
...
ImageView imageViewMyGraphicalImageElement= (ImageView) findViewById(R.id.imageViewMyGraphicalImageElement);
imageViewMyGraphicalImageElement.setImageBitmap(sBitmap); 
Run Code Online (Sandbox Code Playgroud)

问题:显然,基于xml的解决方案调用setContentView(...)之前知道图像.预加载版本该调用之后设置图像.有什么区别吗?由于这个原因,是否可以跳过某些自动缩放或系统完成的其他事情?

K-b*_*llo 3

完全没有区别。您可以认为ImageView构造函数对android:src属性所做的所有操作都是 call setImageResource

更新:实际上它使用setImageDrawable,这是构造函数获取属性的实际代码ImageView

    Drawable d = a.getDrawable(com.android.internal.R.styleable.ImageView_src);
    if (d != null) {
        setImageDrawable(d);
    }
Run Code Online (Sandbox Code Playgroud)

参考:ImageView.java