更改imageview源的最佳方法是什么?

时间:2015-05-04 09:22:09

标签: android imageview

我有一个包含一个png文件的imageview。我想根据4个不同的事件(4个不同的png)更改此imageview的来源。 目前我正在使用imageView.setImageResource更改源代码,但这会导致滞后并导致许多Choreographer警告。 还有更好的方法吗?

4 个答案:

答案 0 :(得分:1)

您可以尝试使用此库http://square.github.io/picasso/来加载图片

答案 1 :(得分:1)

使用像Picasso或Glide这样的库。 它们都有一个非常简单的语法,并将图像加载到一个单独的线程中,因此在UI线程上不会出现延迟。

查看

上的图书馆

https://github.com/bumptech/glide

https://github.com/square/picasso

有更多的图像加载库,但这些库可能是最容易使用的。

答案 2 :(得分:0)

您可以有4个图像视图而不是一个已加载4个图像的图像,并调整这些图像的可见性,这些图像与哪个图像必须可见。

像这样,您不需要在执行期间更改任何imageView的源(只是可见性),并且将摆脱加载/解码时间。

答案 3 :(得分:0)

您可以将四个ImageView叠加在一起,然后根据您要显示的内容更改可见性。将图片加载到内存方面没有任何延迟,因为它们已经存在。只需确保图片内存不太密集

代码:

if (something)
    imageview1.setVisibility(View.VISIBLE);
else if (something)
    imageview2.setVisibility(View.GONE);

默认情况下,RelativeLayout将视图堆叠在彼此之上。在linearlayout中设置visibility.gone也可能使视图“堆叠”。 XML:

<?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">

    <ImageView
        android:id="@+id/pic1"
        android:layout_width="100dp"
        android:layout_height="100dp" 
        android:src="@drawable/pic1"
        android:visibility="visible"
        android:contentDescription="default picture"/>
    <ImageView
        android:id="@+id/pic2"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:src="@drawable/pic2"
        android:visibility="invisible"
        android:contentDescription="pic2"/>
    <ImageView
        android:id="@+id/pic3"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:src="@drawable/pic3"
        android:visibility="invisible"
        android:contentDescription="pic3"/>

    <ImageView
        android:id="@+id/pic4"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:src="@drawable/pic4"
        android:visibility="invisible"
    android:contentDescription="pic4"/>
</RelativeLayout>