Android 如何在现有ImageView上动态添加另一个ImageView?

Android 如何在现有ImageView上动态添加另一个ImageView?,android,xml,imageview,Android,Xml,Imageview,我知道以前也有人问过类似的问题,但我认为我的情况不同。 因此,我尝试使用RecyclerView制作一个播放列表,当选择一首歌曲时,我希望保存歌曲图像的圆形图像变为勾号,而原始图像在背景中褪色。我已经准备好了我的滴答声图像 如何在现有ImageView上动态添加此图像?将一个图像放在背景中的方法对我来说不是一个解决方案,因为音乐图像文件是从领域动态加载的,因此不能作为背景 my RecyclerView项目的XML代码如下: <LinearLayout xmlns:android="htt

我知道以前也有人问过类似的问题,但我认为我的情况不同。 因此,我尝试使用RecyclerView制作一个播放列表,当选择一首歌曲时,我希望保存歌曲图像的圆形图像变为勾号,而原始图像在背景中褪色。我已经准备好了我的滴答声图像

如何在现有ImageView上动态添加此图像?将一个图像放在背景中的方法对我来说不是一个解决方案,因为音乐图像文件是从领域动态加载的,因此不能作为背景

my 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代码动态执行此操作?是否可以使用
设置可见性
以某种方式完成此操作?如果是,请解释新的方法,我们也很欣赏。

您可以在此处使用
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>

是的,可以使用设置可见性来完成。在布局文件中,您很可能需要使用相对布局,以便可以完全相同地锚定两个图像视图。然后,在不希望最初显示的视图上,通过添加以下内容使其不可见:

android:visibility="invisible"
随后,当您想打开/关闭可见性时,可以使用:

myImageView.setVisibility(View.VISIBLE);
myImageView.setVisibility(View.INVISIBLE);

使用
LayerDrawable
class:“管理其他可绘制表数组的可绘制表。这些可绘制表按数组顺序绘制,因此索引最大的元素将绘制在顶部。”