我知道以前曾问过类似的问题,但我认为我的情况有所不同。 因此,我尝试使用RecyclerView制作播放列表,当选择一首歌曲时,我想要将保持歌曲图像的圆形图像更改为刻度线,同时可以看到原始图像在背景中褪色。我准备好了勾选图像。
如何动态地在现有ImageView上添加此图像?在背景方法中放置一个图像对我来说不是一个解决方案,因为音乐图像文件是从Realm动态加载的,因此不能作为背景。
我的RecyclerView项目的XML代码如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:paddingRight="10dp"
android:paddingLeft="30dp"
>
<de.hdodenhof.circleimageview.CircleImageView
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_gravity="start"
android:transitionName="albumArt"
android:id="@+id/album_art"
android:scaleType="centerCrop"
android:src="@color/colorPrimary"/>
<LinearLayout
android:layout_width="fill_parent"
android:gravity="right"
android:paddingLeft="20dp"
android:orientation="vertical"
android:layout_marginTop="20dp"
android:layout_height="wrap_content">
<TextView
android:id="@+id/data"
android:layout_width="match_parent"
android:fontFamily="sans-serif"
android:textColor="#ffffff"
android:text="Music Name"
android:textSize="17sp"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/data_album"
android:layout_width="match_parent"
android:fontFamily="sans-serif"
android:textColor="#bfe0e0e0"
android:textSize="14sp"
android:text="Music Artist"
android:layout_height="wrap_content"
/>
</LinearLayout>
如何从java代码动态执行此操作?可以用set visibility
以某种方式完成吗?如果是,请解释新的方法,这也是值得赞赏的。
答案 0 :(得分:1)
您可以在此处使用FrameLayout
并将ImageView
放在FrameLayout
内,并根据您可以使其中一个可见且其他不可见的条件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:paddingRight="10dp"
android:paddingLeft="30dp"
>
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<de.hdodenhof.circleimageview.CircleImageView
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_gravity="start"
android:transitionName="albumArt"
android:id="@+id/album_art"
android:scaleType="centerCrop"
android:src="@color/colorPrimary"/>
<ImageView
android:id="@+id/imageView"
android:layout_width="120dp"
android:layout_height="120dp">
</ImageView>
</FrameLayout>
<LinearLayout
android:layout_width="fill_parent"
android:gravity="right"
android:paddingLeft="20dp"
android:orientation="vertical"
android:layout_marginTop="20dp"
android:layout_height="wrap_content">
<TextView
android:id="@+id/data"
android:layout_width="match_parent"
android:fontFamily="sans-serif"
android:textColor="#ffffff"
android:text="Music Name"
android:textSize="17sp"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/data_album"
android:layout_width="match_parent"
android:fontFamily="sans-serif"
android:textColor="#bfe0e0e0"
android:textSize="14sp"
android:text="Music Artist"
android:layout_height="wrap_content"
/>
</LinearLayout>
答案 1 :(得分:0)
是的,可以使用设置可见性来完成。在布局文件中,您很可能需要使用相对布局,以便可以将两个图像视图完全相同。然后在您不想最初显示的视图上,通过添加以下内容使其不可见:
android:visibility="invisible"
然后,当您想要打开/关闭可见性时,您可以使用:
myImageView.setVisibility(View.VISIBLE);
myImageView.setVisibility(View.INVISIBLE);