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