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

时间:2017-02-25 17:50:59

标签: android xml imageview

我知道以前曾问过类似的问题,但我认为我的情况有所不同。 因此,我尝试使用RecyclerView制作播放列表,当选择一首歌曲时,我想要将保持歌曲图像的圆形图像更改为刻度线,同时可以看到原始图像在背景中褪色。我准备好了勾选图像。enter image description here

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

我的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以某种方式完成吗?如果是,请解释新的方法,这也是值得赞赏的。

2 个答案:

答案 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);