中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

利用RecyclerView實現一個點贊頭像疊加效果

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

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

1、創建布局文件 一個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值實現疊加效果,通過添加數據,刷新adapter實現,示例代碼中默認從索引0添加的,可以根據需求自行調整,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>

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

向AI問一下細節

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

AI

商都县| 松阳县| 关岭| 枣强县| 徐闻县| 香河县| 巴彦淖尔市| 阿鲁科尔沁旗| 定远县| 湖口县| 天镇县| 昌黎县| 兰州市| 伽师县| 泰顺县| 新河县| 襄城县| 盐池县| 乌拉特后旗| 搜索| 监利县| 林周县| 大宁县| 建平县| 开封县| 郁南县| 威远县| 万宁市| 津市市| 霍山县| 诸暨市| 磴口县| 华池县| 锦屏县| 衡南县| 湖口县| 澳门| 东山县| 凤城市| 额济纳旗| 黔南|