溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

利用RecyclerView實現(xiàn)一個點贊頭像疊加效果

發(fā)布時間:2020-11-06 16:42:52 來源:億速云 閱讀:367 作者:Leah 欄目:開發(fā)技術(shù)

利用RecyclerView實現(xiàn)一個點贊頭像疊加效果?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

1、創(chuàng)建布局文件 一個recyclerview,一個點贊圖片

<&#63;xml version="1.0" encoding="utf-8"&#63;>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="50dp"
    android:orientation="horizontal">
    
  <androidx.recyclerview.widget.RecyclerView
      android:id="@+id/rv_like_header"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_marginStart="15dp"
      android:layoutAnimation="@anim/rv_slide_in_anim"
      app:layout_constraintStart_toStartOf="parent"
      app:layout_constraintTop_toTopOf="parent" />

  <ImageView
      android:id="@+id/iv_like"
      android:layout_width="16dp"
      android:layout_height="16dp"
      android:layout_marginTop="15dp"
      android:layout_marginEnd="15dp"
      android:src="@drawable/img_explore_like"
      app:layout_constraintEnd_toEndOf="parent"
      app:layout_constraintTop_toTopOf="parent"
      app:layout_goneMarginEnd="15dp" />
</androidx.constraintlayout.widget.ConstraintLayout>

recyclerview添加了動畫效果,動畫文件如下

rv_slide_in_anim

<&#63;xml version="1.0" encoding="utf-8"&#63;>
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
  android:animation="@anim/slide_in_left"
  android:animationOrder="normal"
  android:delay="20%" />

slide_in_left

<&#63;xml version="1.0" encoding="utf-8"&#63;>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

  <translate
    android:duration="350"
    android:fromXDelta="-100%p"
    android:toXDelta="0" />

  <alpha 
    android:fromAlpha="0.8"
    android:toAlpha="1.0"
    android:duration="350"
    />

</set>

2、Activity邏輯代碼

val headerUrl=R.drawable.dog_01
    rv_like_header.layoutManager=LinearLayoutManager(this).apply { orientation=LinearLayoutManager.HORIZONTAL }
    val headerList= arrayListOf(headerUrl)
    val mAdapter= LikeMemberHeaderAdapter(this,headerList)
    rv_like_header.adapter=mAdapter
    iv_like.setOnClickListener {
      mAdapter.addData(headerUrl)
    }

3、Adapter代碼

/**
 * @date 2020/7/24
 * @author peter
 * @desc 點贊頭像adapter
 */
class LikeMemberHeaderAdapter(context: Context, data: ArrayList<Int>) : RecyclerView.Adapter<LikeMemberHeaderAdapter.HeaderHolder>() {
  private var mDatas: ArrayList<Int> = data
  private val mContext = context

  override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HeaderHolder {
    return HeaderHolder(LayoutInflater.from(parent.context).inflate(R.layout.item_member_header, parent, false))
  }

  override fun getItemCount(): Int {
    return mDatas.size
  }

  fun addData(headerUrl: Int) {
    // 從左邊添加
    mDatas.add(0, headerUrl)
    notifyDataSetChanged()
  }

  override fun onBindViewHolder(holder: HeaderHolder, position: Int) {
    Glide.with(mContext).load(mDatas[position]).into(holder.ivMemberHeader)
    // 最后一個顯示全部
    if (position == mDatas.size - 1) {
      setMargins(holder.headerRoot, 0, 0, 0, 0)
    } else {
      setMargins(holder.headerRoot, 0, 0, -12, 0)
    }
  }

  private fun setMargins(v: View, l: Int, t: Int, r: Int, b: Int) {
    if (v.layoutParams is MarginLayoutParams) {
      val p = v.layoutParams as MarginLayoutParams
      p.setMargins(l, t, r, b)
      v.requestLayout()
    }
  }

  class HeaderHolder(view: View) : RecyclerView.ViewHolder(view) {
    val headerRoot: FrameLayout = view.findViewById(R.id.lin_header_root)
    val ivMemberHeader: RoundImageView = view.findViewById(R.id.iv_member_header)
  }

}

核心代碼就是通過設置item的margin值實現(xiàn)疊加效果,通過添加數(shù)據(jù),刷新adapter實現(xiàn),示例代碼中默認從索引0添加的,可以根據(jù)需求自行調(diào)整,RoundImageView是一個自定義的圓形圖片,此處不再贅述

4、 Adapter item布局文件

<&#63;xml version="1.0" encoding="utf-8"&#63;>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  xmlns:tools="http://schemas.android.com/tools"
  android:id="@+id/lin_header_root"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">

  <com.example.myapplication.likeHeader.RoundImageView
    android:id="@+id/iv_member_header"
    android:layout_width="17dp"
    android:layout_height="17dp"
    android:scaleType="centerCrop"
    app:maskDrawable="@drawable/circle_mask"
    tools:src="@drawable/member_default_header" />
</FrameLayout>

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI