https://www.altova.com/manual/MobileTogether/mobiletogetherdesigner/mtdobjsfeatures_sizes.html



1.业务样式:
enum class CardViewItemMediaStyleType(val radio: Float) {
Square(1f),
Rectangle(1.7f),
}
2.业务数据
class CardViewItemMediaData(
eventId: String,
var dataType: CardViewItemMediaDataType,
)
enum class CardViewItemMediaDataType(var durationMargin: Margin) {
NONE(Margin.MarginDefault),
VIDEO(Margin.MarginDefault),
MUSIC(Margin.MarginDefault),
MORE(Margin.MarginDefault),
)
3.边距调整
class Margin(var left: Int, var top: Int, var right: Int, var bottom: Int) {
companion object Margin {
val MarginDefault = Margin(0, 0, 8, 8)
val MarginWaterfall = Margin(0, 0, 4, 4)
}
}
4.提供能力

5.事件通知
enum class CardViewItemMediaElement {
ROOT, COVER, VIEWS, SIZE, TIME, TITLE, AUTHOR_ICON, AUTHOR_NAME, ACTION_DOWN, ACTION_MORE
}
demo-XML
<?xml version="1.0" encoding="utf-8"?>
<ScrollView 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:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
tools:context="me.vd.app.MainActivity">
<Button
android:id="@+id/demo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="demo" />
<me.vd.lib.ui.widget.cardview.view.CardViewGroupTitle
android:id="@+id/groupTitle1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<me.vd.lib.ui.widget.cardview.view.CardViewGroupTitle
android:id="@+id/groupTitle2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#30000000" />
<me.vd.lib.ui.widget.cardview.view.components.CardViewItemArrow
android:id="@+id/arrowItem"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<me.vd.lib.ui.widget.text.TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="中文字体"
android:textSize="20dp" />
<me.vd.lib.ui.widget.text.TextViewMedium
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="中文字体"
android:textSize="20dp" />
<me.vd.lib.ui.widget.text.TextViewBold
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="中文字体"
android:textSize="20dp" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<me.vd.lib.ui.widget.button.ToggleButton
android:id="@+id/toggleButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<me.vd.lib.ui.widget.button.ToggleButton
android:id="@+id/toggleButton2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<me.vd.lib.ui.widget.cardview.view.components.CardViewItemMusic
android:id="@+id/cardViewMusic"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/border_color" />
<me.vd.lib.ui.widget.cardview.view.components.CardViewItemDown
android:id="@+id/cardViewDownload"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<me.vd.lib.ui.widget.cardview.view.viewpager.CardMediaViewPager
android:id="@+id/cardMediaViewPager"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<me.vd.lib.ui.widget.cardview.view.viewpager.CardSetsViewPager
android:id="@+id/cardSetsViewPager"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="16dp"
android:paddingRight="16dp">
<me.vd.lib.ui.widget.cardview.view.CardViewGroupTitle
android:id="@+id/cardImageViewPagerTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp" />
<me.vd.lib.ui.widget.cardview.view.viewpager.CardImageViewPager
android:id="@+id/cardImageViewPager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_marginBottom="30dp" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<me.vd.lib.ui.widget.cardview.view.components.CardViewItemSets
android:id="@+id/cardViewSets1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
<me.vd.lib.ui.widget.cardview.view.components.CardViewItemSets
android:id="@+id/cardViewSets2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
<me.vd.lib.ui.widget.cardview.view.components.CardViewItemSetsHorizontal
android:id="@+id/cardViewSetsHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
<me.vd.lib.ui.widget.cardview.view.components.CardViewItemMediaHorizontal
android:id="@+id/mediaCardHorizontal1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<me.vd.lib.ui.widget.cardview.view.components.CardViewItemMediaHorizontal
android:id="@+id/mediaCardHorizontal2"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<me.vd.lib.ui.widget.cardview.view.components.CardViewItemImageRounder
android:id="@+id/mediaCardLImageRounder"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<me.vd.lib.ui.widget.cardview.view.components.CardViewItemImage
android:id="@+id/mediaCardLImage"
android:layout_width="200dp"
android:background="#000000"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<me.vd.lib.ui.widget.cardview.view.components.CardViewItemImage
android:id="@+id/mediaCardLImage1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
<me.vd.lib.ui.widget.cardview.view.components.CardViewItemImage
android:id="@+id/mediaCardLImage2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<me.vd.lib.ui.widget.cardview.view.components.CardViewItemImage
android:id="@+id/mediaCardLImage3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
<me.vd.lib.ui.widget.cardview.view.components.CardViewItemImage
android:id="@+id/mediaCardLImage4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<me.vd.lib.ui.widget.cardview.view.components.CardViewItemMedia
android:id="@+id/mediaCardL1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:layout_weight="1" />
<View
android:layout_width="5dp"
android:layout_height="1dp" />
<me.vd.lib.ui.widget.cardview.view.components.CardViewItemMedia
android:id="@+id/mediaCardL2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="5dp"
android:layout_weight="1" />
</LinearLayout>
<me.vd.lib.ui.widget.cardview.view.components.CardViewItemMedia
android:id="@+id/mediaCard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#000000"
app:CardViewImageMinHeight="88dp"
app:CardViewImageMinWidth="156dp" />
<me.vd.lib.ui.widget.cardview.view.components.CardViewItemMedia
android:id="@+id/mediaCard1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<me.vd.lib.ui.widget.cardview.view.components.CardViewItemMedia
android:id="@+id/mediaCard2"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<me.vd.lib.ui.widget.cardview.view.components.CardViewItemMedia
android:id="@+id/mediaCard3"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<me.vd.lib.ui.widget.cardview.view.components.CardViewItemMedia
android:id="@+id/mediaCard4"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<me.vd.lib.ui.widget.cardview.view.components.CardViewItemHead
android:id="@+id/userHead"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<me.vd.lib.ui.widget.cardview.view.CardViewGroup
android:id="@+id/cardViewGroup1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<me.vd.lib.ui.widget.cardview.view.CardViewGroup
android:id="@+id/cardViewGroup2"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<me.vd.lib.ui.widget.cardview.view.CardViewGroup
android:id="@+id/cardViewGroup3"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<me.vd.lib.ui.widget.cardview.view.viewpager.CardViewPager
android:id="@+id/cardViewPager1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<me.vd.lib.ui.widget.cardview.view.viewpager.CardViewPager
android:id="@+id/cardViewPager2"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<me.vd.lib.ui.widget.cardview.view.viewpager.CardViewPager
android:id="@+id/cardViewPager3"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<me.vd.lib.ui.widget.cardview.view.viewpager.CardViewPager
android:id="@+id/cardViewPager4"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<me.vd.lib.ui.widget.cardview.view.viewpager.CardViewPager
android:id="@+id/cardViewPager5"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<me.vd.lib.ui.widget.cardview.view.viewpager.CardViewPager
android:id="@+id/cardViewPager6"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<me.vd.lib.ui.widget.cardview.view.viewpager.CardViewPager
android:id="@+id/cardViewPager7"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</ScrollView>
Demo-Usage
package me.vd.app
import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import me.vd.lib.ui.widget.button.ToggleButton
import me.vd.lib.ui.widget.cardview.view.CardViewGroup
import me.vd.lib.ui.widget.cardview.view.CardViewGroupTitle
import me.vd.lib.ui.widget.cardview.view.CardViewItem
import me.vd.lib.ui.widget.cardview.view.components.*
import me.vd.lib.ui.widget.cardview.view.CardViewPagerView
import me.vd.lib.ui.widget.cardview.view.viewpager.*
class MainActivity : AppCompatActivity() {
private val IMAMGE1 =
"https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=1000551505,2077899926&fm=26&gp=0.jpg"
private val IMAMGE2 =
"https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fhbimg.b0.upaiyun.com%2F3d3bbb5626df7c0a52b0e665eea40a45dde19b051b795-9m8Sul_fw658&refer=http%3A%2F%2Fhbimg.b0.upaiyun.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1621504511&t=02349c7e63dbc0ef576b20aefd93ff1e"
private val IMAMGE3 =
"https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fmedia-cdn.tripadvisor.com%2Fmedia%2Fphoto-s%2F07%2F96%2Faf%2F8a%2Ftup-island.jpg&refer=http%3A%2F%2Fmedia-cdn.tripadvisor.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1621504511&t=e936958cad376c1542d7ada058cbc7c2"
private val IMAMGE4 =
"https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=4015235454,569502415&fm=26&gp=0.jpg"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
findViewById<View>(R.id.demo).setOnClickListener {
startActivity(Intent(this,
DemoActivity::class.java))
}
buttons()
titles()
cardViewSets()
cardViewDown()
imageCard()
musicCard()
imageCardViewPager()
mediaCardViewPager()
cardSetsViewPager()
mediaCardHorizontal()
mediaCard()
userHead()
cardViewGroupStyle()
viewPagerItems()
}
private fun buttons() {
val toggleButtonClicker = object : ToggleButton.ToggleButtonClicker {
override fun onClick(toggleOn: Boolean) {
Toast.makeText(this@MainActivity, "toggleOn:" + toggleOn, Toast.LENGTH_SHORT).show()
}
}
val toggleButton1 = findViewById<ToggleButton>(R.id.toggleButton1)
toggleButton1.setStyle(ToggleButton.ToggleButtonStyle.SUBSCRIBER)
.setClick(toggleButtonClicker)
toggleButton1.setToggle(true)
val toggleButton2 = findViewById<ToggleButton>(R.id.toggleButton2)
toggleButton2.setStyle(ToggleButton.ToggleButtonStyle.SUBSCRIBER_IMMEDIATE)
.setClick(toggleButtonClicker)
toggleButton2.setToggle(true)
val arrowItem = findViewById<CardViewItemArrow>(R.id.arrowItem)
arrowItem.setData(CardViewItemArrow.CardViewItemArrowData("xxxx",R.drawable.lib_widget_icon_video_icon,"xxx","xxxx"),clicker)
arrowItem.setData(CardViewItemArrow.CardViewItemArrowData("xxxx",IMAMGE1,"xxx","xxxx"),clicker)
}
private fun titles() {
val groupTitle1 = findViewById<CardViewGroupTitle>(R.id.groupTitle1)
groupTitle1.setData(CardViewGroupTitle.CardViewGroupTitleData("111",
"Title",
arrowVisible = true,
darkStyle = false), clicker)
val groupTitle2 = findViewById<CardViewGroupTitle>(R.id.groupTitle2)
groupTitle2.setData(CardViewGroupTitle.CardViewGroupTitleData("111",
"Title",
arrowVisible = true,
darkStyle = true), clicker)
}
private fun userHead() {
val userHead = findViewById<CardViewItemHead>(R.id.userHead)
userHead.setData(CardViewItemHead.CardViewItemHeadData("eventId1",
IMAMGE1,
"Bird",
"bird@mail.com"), clicker)
userHead.setStyle(CardViewItemHead.CardViewItemHeadStyle.NO_LOGIN)
}
private fun cardViewSets() {
val cardViewSetsdata1 = CardViewItemSets.CardViewItemSetsData(
"1",
"53", IMAMGE1,
"2021 New Years")
val cardViewSetsdata2 = CardViewItemSets.CardViewItemSetsData(
"1",
"55", IMAMGE1, "Title", "Author")
val cardViewSets1 = findViewById<CardViewItemSets>(R.id.cardViewSets1)
cardViewSets1.setSizeStyle(CardViewItemSets.CardViewItemSetsStyle.Rectangle)
.setData(cardViewSetsdata1, clicker)
val cardViewSets2 = findViewById<CardViewItemSets>(R.id.cardViewSets2)
cardViewSets2.setSizeStyle(CardViewItemSets.CardViewItemSetsStyle.Rectangle)
.setData(cardViewSetsdata1, clicker)
val cardViewSetsHorizontal =
findViewById<CardViewItemSetsHorizontal>(R.id.cardViewSetsHorizontal)
cardViewSetsHorizontal
.setSizeStyle(CardViewItemSetsHorizontal.CardViewItemSetsHorizontalStyle.Rectangle)
.setData(cardViewSetsdata2, clicker)
}
private fun cardViewDown() {
val mediaCardDown = findViewById<CardViewItemDown>(R.id.cardViewDownload)
mediaCardDown.setData(CardViewItemDown.CardViewItemDownData(
"1",
IMAMGE1,
"UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBREL",
"03:18",
"200.20MB"), clicker)
mediaCardDown.downloading(20, "152KB/s", "165.0MB")
mediaCardDown.downloaded()
}
private fun musicCard() {
val cardViewMusicData = CardViewItemMusic.CardViewItemMusicData("111",
true,
IMAMGE1,
"Escape from Pretoria(2020)",
"The hottest songs this week,served up fresh every friday",
"49 Musics"
)
val cardViewMusic = findViewById<CardViewItemMusic>(R.id.cardViewMusic)
cardViewMusic.setData(cardViewMusicData, clicker)
//cardViewMusic.setImageSize(170,170).setData(cardViewMusicData, clicker)
}
private fun mediaCardHorizontal() {
val mediaCard1 = findViewById<CardViewItemMediaHorizontal>(R.id.mediaCardHorizontal1)
mediaCard1.setSizeStyle(CardViewItemMediaHorizontal.CardViewItemMediaStyleType.Rectangle)
.setData(CardViewItemMediaHorizontal.CardViewItemMediaData(
"1",
CardViewItemMediaHorizontal.CardViewItemMediaDataType.DISPLAY,
"UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBREL",
IMAMGE1,
"Artmoeba Productions",
R.drawable.ic_launcher_background,
"1W",
"12:12",
"250MB",
"1 days ago",false, false), clicker)
val mediaCard2 = findViewById<CardViewItemMediaHorizontal>(R.id.mediaCardHorizontal2)
mediaCard2.setSizeStyle(CardViewItemMediaHorizontal.CardViewItemMediaStyleType.RectangleMore)
.setData(CardViewItemMediaHorizontal.CardViewItemMediaData(
"1",
CardViewItemMediaHorizontal.CardViewItemMediaDataType.ACTION_MORE,
"UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBREL",
IMAMGE1,
"Artmoeba Productions",
IMAMGE1,
"1W",
"12:12",
"250MB",
"1 days ago", false, true), clicker)
}
private fun imageCard() {
val cardViewItemImageRounderData = CardViewItemImageRounder.CardViewItemImageRounderData(
"111", IMAMGE1, "Escape from Pretoria(2020)")
val cardViewItemImageRounderDataMore = CardViewItemImageRounder.CardViewItemImageRounderData(
"111", R.drawable.lib_widget_icon_card_view_download, "xx")
val mediaCardLImageRounder = findViewById<CardViewItemImageRounder>(R.id.mediaCardLImageRounder)
//mediaCardLImageRounder.setData(cardViewItemImageRounderData, clicker)
mediaCardLImageRounder.setImageSize(48).setTextSize(70).setData(cardViewItemImageRounderDataMore, clicker)
// val cardImageData = CardViewItemImage.CardViewItemImageData("111",
// IMAMGE1,
// "Escape from Pretoria(2020)","03:18")
val cardImageData = CardViewItemImage.CardViewItemImageData("111",
R.drawable.lib_widget_icon_arrow,"03:18")
val cardImageData1 = CardViewItemImage.CardViewItemImageData("111",
IMAMGE1,
"Escape from Pretoria(2020)",
"7.9", CardViewItemImage.CardViewItemImageFlag.SCORE)
val cardImageData2 = CardViewItemImage.CardViewItemImageData("111",
IMAMGE1,
"Escape from Pretoria(2020)",
"7.9", CardViewItemImage.CardViewItemImageFlag.SCORE_IMDB)
val cardImageData3 = CardViewItemImage.CardViewItemImageData("111",
IMAMGE1,
"Escape from Pretoria(2020)", CardViewItemImage.CardViewItemImageFlag.GAME
)
val cardImageData4 = CardViewItemImage.CardViewItemImageData("111",
IMAMGE1,
"Escape from Pretoria(2020)", CardViewItemImage.CardViewItemImageFlag.MUSIC
)
val mediaCardLImage= findViewById<CardViewItemImage>(R.id.mediaCardLImage)
mediaCardLImage.setSizeStyle(CardViewItemImage.CardViewItemImageStyleType.Rectangle)
.setData(cardImageData, clicker)
val mediaCardLImage1 = findViewById<CardViewItemImage>(R.id.mediaCardLImage1)
mediaCardLImage1.setSizeStyle(CardViewItemImage.CardViewItemImageStyleType.RectangleVertical)
.setData(cardImageData1, clicker)
val mediaCardLImage2 = findViewById<CardViewItemImage>(R.id.mediaCardLImage2)
mediaCardLImage2.setSizeStyle(CardViewItemImage.CardViewItemImageStyleType.RectangleVertical)
.setData(cardImageData2, clicker)
val mediaCardLImage3 = findViewById<CardViewItemImage>(R.id.mediaCardLImage3)
mediaCardLImage3.setSizeStyle(CardViewItemImage.CardViewItemImageStyleType.RectangleVertical)
.setData(cardImageData3, clicker)
val mediaCardLImage4 = findViewById<CardViewItemImage>(R.id.mediaCardLImage4)
mediaCardLImage4.setSizeStyle(CardViewItemImage.CardViewItemImageStyleType.RectangleVertical)
.setData(cardImageData4, clicker)
}
private fun imageCardViewPager() {
val imageDataTitle = findViewById<CardViewGroupTitle>(R.id.cardImageViewPagerTitle)
imageDataTitle.setData(CardViewGroupTitle.CardViewGroupTitleData("111",
"Get Your Heart Racing",
arrowVisible = true,
darkStyle = false), clicker)
val imageData = CardViewItemImage.CardViewItemImageData("",
IMAMGE1,
"Bad Boys for Life(2020)",
CardViewItemImage.CardViewItemImageFlag.GAME)
val cardImageViewPager = findViewById<CardImageViewPager>(R.id.cardImageViewPager)
cardImageViewPager.setStyle(CardWrapperViewPager.CardViewPagerStyle.ThreeCard)
.setItems(arrayOf(imageData, imageData, imageData, imageData, imageData), clicker)
}
private fun mediaCardViewPager() {
val mediaData = CardViewItemMedia.CardViewItemMediaData(
"1",
CardViewItemMedia.CardViewItemMediaDataType.MUSIC,
"music-UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBREL",
IMAMGE1,
"Artmoeba Productions",
IMAMGE1,
"1W",
"Tracks",
"", "", false)
val cardMediaViewPager = findViewById<CardMediaViewPager>(R.id.cardMediaViewPager)
cardMediaViewPager.setStyle(CardWrapperViewPager.CardViewPagerStyle.ThreeCardSquare)
.setItems(arrayOf(mediaData, mediaData, mediaData, mediaData, mediaData), clicker)
}
private fun cardSetsViewPager() {
val cardViewSetsdata = CardViewItemSets.CardViewItemSetsData(
"1",
"53", IMAMGE1,
"2021 New Years")
val cardSetsViewPager = findViewById<CardSetsViewPager>(R.id.cardSetsViewPager)
cardSetsViewPager.setStyle(CardWrapperViewPager.CardViewPagerStyle.ThreeCardSquare)
.setItems(arrayOf(cardViewSetsdata, cardViewSetsdata, cardViewSetsdata, cardViewSetsdata, cardViewSetsdata), clicker)
}
private fun mediaCard() {
val mediaCardL1 = findViewById<CardViewItemMedia>(R.id.mediaCardL1)
mediaCardL1.setSizeStyle(CardViewItemMedia.CardViewItemMediaStyleType.Square).setTitleSize(14f)
.setData(CardViewItemMedia.CardViewItemMediaData(
"1",
CardViewItemMedia.CardViewItemMediaDataType.MUSIC,
"UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBREL",
IMAMGE1,
"Artmoeba Productions",
IMAMGE1,
"1W",
"Tracks",
"250MB", "", isLive = true, isFullMovie = false), clicker)
val mediaCardL2 = findViewById<CardViewItemMedia>(R.id.mediaCardL2)
mediaCardL2.setSizeStyle(CardViewItemMedia.CardViewItemMediaStyleType.Rectangle)
.setData(CardViewItemMedia.CardViewItemMediaData(
"1",
CardViewItemMedia.CardViewItemMediaDataType.MORE,
"UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBREL",
IMAMGE1,
"Artmoeba Productions",
IMAMGE1,
"1W",
"12:12",
"250MB", "", isLive = false, isFullMovie = true), clicker)
val mediaCard = findViewById<CardViewItemMedia>(R.id.mediaCard)
mediaCard.setSizeRadio(1f).setData(CardViewItemMedia.CardViewItemMediaData(
"1",
CardViewItemMedia.CardViewItemMediaDataType.ONLY_DURATION,
"1.9f-UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBREL",
IMAMGE1,
"Artmoeba Productions",
IMAMGE1,
"1W",
"12:12",
"250MB"), clicker)
val mediaCard1 = findViewById<CardViewItemMedia>(R.id.mediaCard1)
mediaCard1.setSizeStyle(CardViewItemMedia.CardViewItemMediaStyleType.Square)
.setData(CardViewItemMedia.CardViewItemMediaData(
"1",
CardViewItemMedia.CardViewItemMediaDataType.VIDEO,
"UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBREL",
IMAMGE1,
"Artmoeba Productions",
IMAMGE1,
"1W",
"12:12",
"250MB"), clicker)
val mediaCard2 = findViewById<CardViewItemMedia>(R.id.mediaCard2)
mediaCard2.setSizeStyle(CardViewItemMedia.CardViewItemMediaStyleType.Rectangle)
.setData(CardViewItemMedia.CardViewItemMediaData(
"1",
CardViewItemMedia.CardViewItemMediaDataType.MORE,
"UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBREL",
IMAMGE1,
"Artmoeba Productions",
IMAMGE1,
"1W",
"12:12",
"250MB"), clicker)
val mediaCard3 = findViewById<CardViewItemMedia>(R.id.mediaCard3)
mediaCard3.setRootSize(280, 245)
.setData(CardViewItemMedia.CardViewItemMediaData(
"1",
CardViewItemMedia.CardViewItemMediaDataType.VIDEO,
"CardViewItemMedia--UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBREL",
IMAMGE1,
"Artmoeba Productions",
IMAMGE1,
"1W",
"12:12",
"250MB"), clicker)
val mediaCard4 = findViewById<CardViewItemMedia>(R.id.mediaCard4)
mediaCard4.setRootSize(270, 245)
.setData(CardViewItemMedia.CardViewItemMediaData(
"1",
CardViewItemMedia.CardViewItemMediaDataType.VIDEO,
"UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBRELLA | Award-Winning and Oscar®-Qualified CGI Animated…UMBREL",
IMAMGE1,
"Artmoeba Productions",
IMAMGE1,
"1W",
"12:12",
"250MB"), clicker)
}
private fun cardViewGroupStyle() {
val cardViewGroup1 = findViewById<CardViewGroup>(R.id.cardViewGroup1)
val historyItems = arrayOf(
CardViewPager.CardViewPagerData("g_1",
IMAMGE1,
"Women’s History "),
CardViewPager.CardViewPagerData("g_2",
IMAMGE2,
"Women’s History "),
CardViewPager.CardViewPagerData("g_3",
IMAMGE3,
"Women’s History "))
cardViewGroup1.setTitle("My record").setItems(
arrayOf(CardViewItemArrow.CardViewItemArrowData(
"Record_1",
me.vd.lib.ui.widget.R.drawable.lib_widget_icon_me_settings_history,
"History"
), CardViewPagerView.CardViewPagerViewData(
"Record_2",
CardViewPager.CardViewPagerStyle.MeCenter,
historyItems
), CardViewItemArrow.CardViewItemArrowData(
"Record_3",
me.vd.lib.ui.widget.R.drawable.lib_widget_icon_me_settings_flowing,
"Following"
), CardViewItemArrow.CardViewItemArrowData(
"Record_4",
me.vd.lib.ui.widget.R.drawable.lib_widget_icon_me_settings_likevideo,
"Liked Videos"
), CardViewItemArrow.CardViewItemArrowData(
"Record_5",
me.vd.lib.ui.widget.R.drawable.lib_widget_icon_me_settings_watchlist,
"Watchlist"
)), clicker)
val cardViewGroup2 = findViewById<CardViewGroup>(R.id.cardViewGroup2)
cardViewGroup2.setTitle("Setting").setItems(
arrayOf(CardViewItemArrow.CardViewItemArrowData(
"Setting_1",
me.vd.lib.ui.widget.R.drawable.lib_widget_icon_me_settings_language,
"Language"
), CardViewItemArrow.CardViewItemArrowData(
"Setting_2",
me.vd.lib.ui.widget.R.drawable.lib_widget_icon_me_settings_versions,
"Version", "1.5.0"
), CardViewItemArrow.CardViewItemArrowData(
"Setting_3",
me.vd.lib.ui.widget.R.drawable.lib_widget_icon_me_settings_clearcache,
"Clear the Cache", "250MB"
), CardViewItemToggle.CardViewItemToggleData(
"Setting_4",
me.vd.lib.ui.widget.R.drawable.lib_widget_icon_me_settings_notifycation,
"Notify the Switch", "",
false
)), clicker)
val cardViewGroup3 = findViewById<CardViewGroup>(R.id.cardViewGroup3)
cardViewGroup3.setTitle("Follow Us").setItems(
arrayOf(CardViewItemArrow.CardViewItemArrowData(
"Follow_1",
me.vd.lib.ui.widget.R.drawable.lib_widget_icon_me_settings_fl_facebook,
"Follow us on Facebook", ""
), CardViewItemArrow.CardViewItemArrowData(
"Follow_2",
me.vd.lib.ui.widget.R.drawable.lib_widget_icon_me_settings_fl_youtube,
"Follow us on Youtube", ""
), CardViewItemArrow.CardViewItemArrowData(
"Follow_3",
me.vd.lib.ui.widget.R.drawable.lib_widget_icon_me_settings_fl_tlegram,
"Join our telegram channel", ""
)), clicker)
}
private val clicker = object : CardViewItem.CardViewItemClicker {
override fun onClick(
eventId: String?,
data: CardViewItem.CardViewItemData?,
element: Any?
) {
when (element) {
is CardViewItemMusic.CardViewItemImageElement -> {
Toast.makeText(this@MainActivity, "element:${element.name}", Toast.LENGTH_SHORT)
.show()
Log.d("MainActivityCk-EL-1:", "element: ${element.name}")
}
is CardViewItemMedia.CardViewItemMediaElement -> {
Toast.makeText(this@MainActivity, "element:${element.name}", Toast.LENGTH_SHORT)
.show()
Log.d("MainActivityCk-EL-1:", "element: ${element.name}")
}
is CardViewItemHead.CardViewItemHeadElement -> {
Toast.makeText(this@MainActivity, "element:${element.name}", Toast.LENGTH_SHORT)
.show()
Log.d("MainActivityCk-EL-2:", "element: ${element.name}")
}
is CardViewItemToggle.CardViewItemToggleElement -> {
Toast.makeText(this@MainActivity, "element:${element.name}", Toast.LENGTH_SHORT)
.show()
Log.d("MainActivityCk-EL-3:", "element: ${element.name}")
}
else -> {
Toast.makeText(this@MainActivity, "eventId:${eventId}", Toast.LENGTH_SHORT)
.show()
Log.d("MainActivityCk-Click:", "eventId: $eventId \ndata:$data")
}
}
}
}
private fun viewPagerItems() {
val viewPager1 = findViewById<CardViewPager>(R.id.cardViewPager1)
viewPager1.setStyle(CardViewPager.CardViewPagerStyle.HomeBanner)
.setItems(arrayOf(
CardViewPager.CardViewPagerData("1",
IMAMGE1,
"Women’s History "),
CardViewPager.CardViewPagerData("1",
IMAMGE2,
"Women’s History "),
CardViewPager.CardViewPagerData("1",
IMAMGE3,
"Women’s History ")), clicker)
val viewPager2 = findViewById<CardViewPager>(R.id.cardViewPager2)
viewPager2.setStyle(CardViewPager.CardViewPagerStyle.MovieBanner)
.setItems(arrayOf(
CardViewPager.CardViewPagerData("1",
IMAMGE1,
"Women’s History "),
CardViewPager.CardViewPagerData("1",
IMAMGE2,
"Women’s History "),
CardViewPager.CardViewPagerData("1",
IMAMGE3,
"Women’s History ")), clicker)
val viewPager3 = findViewById<CardViewPager>(R.id.cardViewPager3)
viewPager3.setStyle(CardViewPager.CardViewPagerStyle.SingleCard)
.setItems(arrayOf(
CardViewPager.CardViewPagerData("1",
IMAMGE1,
"Women’s History "),
CardViewPager.CardViewPagerData("1",
IMAMGE2,
"Women’s History "),
CardViewPager.CardViewPagerData("1",
IMAMGE3,
"Women’s History ")), clicker)
val viewPager4 = findViewById<CardViewPager>(R.id.cardViewPager4)
viewPager4.setStyle(CardViewPager.CardViewPagerStyle.ThreeCardSquare)
.setItems(arrayOf(
CardViewPager.CardViewPagerData("1",
IMAMGE1,
"Women’s History "),
CardViewPager.CardViewPagerData("1",
IMAMGE2,
"Women’s History "),
CardViewPager.CardViewPagerData("1",
IMAMGE3,
"Women’s History ")), clicker)
val viewPager5 = findViewById<CardViewPager>(R.id.cardViewPager5)
viewPager5.setStyle(CardViewPager.CardViewPagerStyle.ThreeCardRectangle)
.setItems(arrayOf(
CardViewPager.CardViewPagerData("1",
IMAMGE1,
"Women’s History "),
CardViewPager.CardViewPagerData("1",
IMAMGE2,
"Women’s History "),
CardViewPager.CardViewPagerData("1",
IMAMGE3,
"Women’s History ")), clicker)
val viewPager6 = findViewById<CardViewPager>(R.id.cardViewPager6)
viewPager6.setStyle(CardViewPager.CardViewPagerStyle.FourCard)
.setItems(arrayOf(
CardViewPager.CardViewPagerData("1",
IMAMGE1,
"Women’s History "),
CardViewPager.CardViewPagerData("1",
IMAMGE2,
"Women’s History "),
CardViewPager.CardViewPagerData("1",
IMAMGE3,
"Women’s History "),
CardViewPager.CardViewPagerData("1",
IMAMGE4,
"Women’s History ")), clicker)
val viewPager7 = findViewById<CardViewPager>(R.id.cardViewPager7)
viewPager7.setStyle(CardViewPager.CardViewPagerStyle.UserHeads)
.setItems(arrayOf(
CardViewPager.CardViewPagerData("1",
IMAMGE1,
"name"),
CardViewPager.CardViewPagerData("1",
IMAMGE2),
CardViewPager.CardViewPagerData("1",
IMAMGE3),
CardViewPager.CardViewPagerData("1",
IMAMGE4,
"name"),
CardViewPager.CardViewPagerData("1",
IMAMGE4,
"name"),
CardViewPager.CardViewPagerData("1",
IMAMGE4)),
clicker)
}
}
Clicker(Element-Command):
enum class CardViewItemMediaElement {
ROOT, COVER, VIEWS, SIZE, TIME,
TITLE, AUTHOR_ICON, AUTHOR_NAME,
ACTION_DOWN, ACTION_MORE
}
views?.setOnClickListener {
eventClicker?.onClick(eventId, eventData, CardViewItemMediaElement.VIEWS) }
cover?.setOnClickListener { callClicker(CardViewItemMediaElement.COVER) }
View:CardImageViewPager
class CardImageViewPager(context: Context?, array: AttributeSet?) :
CardWrapperViewPager(context, array) {
override fun instanceView(
container: ViewGroup,
position: Int,
data: CardViewItem.CardViewItemData,
styleType: CardViewPagerStyle?,
clicker: CardViewItem.CardViewItemClicker?
): View {
val view =
View.inflate(container.context, R.layout.lib_widget_rv_card_view_image_view_pager, null)
val imageCard = view.findViewById<CardViewItemImage>(R.id.imageCard)
imageCard.setSizeStyle(convertType(styleType)).setData(data, clicker)
return view
}
private fun convertType(styleType: CardViewPagerStyle?): CardViewItemImage.CardViewItemImageStyleType {
return when (styleType) {
null -> {
CardViewItemImage.CardViewItemImageStyleType.RectangleVertical
}
CardViewPagerStyle.FourCardDarkMode -> {
CardViewItemImage.CardViewItemImageStyleType.RectangleVerticalDarkMode
}
CardViewPagerStyle.FourCard -> {
CardViewItemImage.CardViewItemImageStyleType.RectangleVertical
}
CardViewPagerStyle.ThreeCard -> {
CardViewItemImage.CardViewItemImageStyleType.RectangleVertical
}
else -> CardViewItemImage.CardViewItemImageStyleType.RectangleVertical
}
}
}
View: CardWrapperViewPager
open class CardWrapperViewPager(context: Context?, array: AttributeSet?) :
LinearLayout(context, array) {
enum class CardViewPagerStyle(
var viewMargin: Int,
var viewRadio: Float,
var itemCount: Float,
var animationScale: Float,
var round: Boolean = false,
var indicatorEnable: Boolean = false
) {
HomeBanner(-1, 1.77f, 1f, 0.8f),
MovieBanner(-1, 1.77f, 1f, 1f),
ThreeCard(8, 0.7f, 2.5f, 1f),
ThreeCardSquare(8, 1f, 2.5f, 1f),
FourCard(8, 0.7f, 3.5f, 1f),
FourCardDarkMode(8, 0.7f, 3.5f, 1f),
}
private var mRootView: LinearLayout? = null
private var mViewPager: ViewPager? = null
private var springDotsIndicator: DotsIndicator? = null
private var mItemViewPagerData: Array<out CardViewItem.CardViewItemData>? = null
private var mItemViewStyleType: CardViewPagerStyle? = null
private var mViewWidth: Int = LayoutParams.MATCH_PARENT
private var mViewGravity: Int = Gravity.CENTER
private var mViewRadio: Float = 1f
private var mViewCount: Float = 1f
private var mViewRound: Boolean = false
private var mItemEdge: Int = 0
private var mItemMargin: Int = 0
private var mItemScale: Float = 0.8f
private var indicatorEnable: Boolean = false
init {
LinearLayout.inflate(context, R.layout.lib_widget_card_view_pager, this)
mRootView = findViewById(R.id.lib_widget_viewPager_root)
mViewPager = findViewById(R.id.lib_widget_viewPager)
springDotsIndicator = findViewById(R.id.lib_widget_viewPager_indicator)
}
fun setStyle(pagerStyle: CardViewPagerStyle): CardWrapperViewPager {
this.mItemViewStyleType = pagerStyle
when (pagerStyle) {
CardViewPagerStyle.HomeBanner -> {
mViewWidth = ScreenUtils.getScreenWidth(context) - dpx(26 * 2)
mViewGravity = Gravity.CENTER
mItemMargin = -dpx((26 + 12) * 2)
indicatorEnable = false
}
CardViewPagerStyle.MovieBanner -> {
mViewWidth = ScreenUtils.getScreenWidth(context) - dpx(26 * 2)
mViewGravity = Gravity.LEFT
mItemMargin = -dpx((26) * 2)
indicatorEnable = true
}
else -> {
mViewWidth = LinearLayout.LayoutParams.MATCH_PARENT
mViewGravity = Gravity.CENTER
mItemMargin = dpx(pagerStyle.viewMargin)
indicatorEnable = false
}
}
mViewRadio = pagerStyle.viewRadio
mViewCount = pagerStyle.itemCount
mViewRound = pagerStyle.round
mItemScale = pagerStyle.animationScale
return this
}
fun setItems(
itemPagers: Array<out CardViewItem.CardViewItemData>?,
clicker: CardViewItem.CardViewItemClicker? = null
) {
mItemViewPagerData = itemPagers
mViewPager!!.adapter = ViewPagerAdapter(mItemViewPagerData,
mViewWidth,
mViewGravity,
mViewRadio,
mViewCount,
mItemViewStyleType,
clicker)
mViewPager!!.offscreenPageLimit = mItemViewPagerData?.size ?: 0
mViewPager?.pageMargin = mItemMargin
if (!mItemScale.equals(0f) && !mItemScale.equals(1f)) {
mViewPager!!.setPageTransformer(true, ZoomOutPageTransformer(mItemScale, 1f))
}
if (indicatorEnable) {
springDotsIndicator?.visibility = View.VISIBLE
springDotsIndicator?.setViewPager(mViewPager!!)
} else {
springDotsIndicator?.visibility = View.GONE
}
}
inner class ViewPagerAdapter(
data: Array<out CardViewItem.CardViewItemData>?,
var width: Int,
var cardGravity: Int,
var cardRadio: Float,
var cardCount: Float,
var styleType: CardViewPagerStyle?,
var clicker: CardViewItem.CardViewItemClicker?
) :
PagerAdapter() {
private val mData: Array<out CardViewItem.CardViewItemData> =
data ?: arrayOf()
override fun getCount(): Int {
return mData.size
}
override fun getPageWidth(position: Int): Float {
return super.getPageWidth(position) / cardCount
}
override fun instantiateItem(container: ViewGroup, position: Int): Any {
val view = instanceView(container, position, mData[position], styleType, clicker)
container.addView(view)
return view
}
override fun isViewFromObject(view: View, `object`: Any): Boolean {
return view === `object`
}
override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) {
container.removeView(`object` as View)
}
}
protected open fun instanceView(
container: ViewGroup,
position: Int,
data: CardViewItem.CardViewItemData,
styleType: CardViewPagerStyle?,
clicker: CardViewItem.CardViewItemClicker?
): View {
return inflate(container.context, R.layout.lib_widget_rv_card_view_wrapper_view_pager, null)
}
private fun dpx(dp: Int): Int {
return ScreenUtils.dp2px(context, dp)
}
class ZoomOutPageTransformer(val min: Float, val max: Float) : PageTransformer {
override fun transformPage(page: View, position: Float) {
if (min == max) return
if (position <= 1) {
val scaleFactor = min + (1 - abs(position)) * (max - min)
page.scaleX = scaleFactor
if (position > 0) {
page.translationX = -scaleFactor * 2
} else if (position < 0) {
page.translationX = scaleFactor * 2
}
page.scaleY = scaleFactor
} else {
page.scaleX = min
page.scaleY = min
}
}
}
fun setEdgeGlowColor(viewPager: ViewPager?, color: Int) {
try {
val clazz: Class<*> = ViewPager::class.java
for (name in arrayOf(
"mLeftEdge", "mRightEdge"
)) {
val field: Field = clazz.getDeclaredField(name)
field.isAccessible = true
val edge: Any = field.get(viewPager) // android.support.v4.widget.EdgeEffectCompat
val fEdgeEffect: Field = edge.javaClass.getDeclaredField("mEdgeEffect")
fEdgeEffect.isAccessible = true
setEdgeEffectColor(fEdgeEffect.get(edge) as EdgeEffect, color)
}
} catch (ignored: Exception) {
}
}
fun setEdgeEffectColor(edgeEffect: EdgeEffect, color: Int) {
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
edgeEffect.color = color
return
}
val edgeField: Field = EdgeEffect::class.java.getDeclaredField("mEdge")
val glowField: Field = EdgeEffect::class.java.getDeclaredField("mGlow")
edgeField.isAccessible = true
glowField.isAccessible = true
val mEdge = edgeField.get(edgeEffect) as Drawable
val mGlow = glowField.get(edgeEffect) as Drawable
mEdge.setColorFilter(color, PorterDuff.Mode.SRC_IN)
mGlow.setColorFilter(color, PorterDuff.Mode.SRC_IN)
mEdge.callback = null // free up any references
mGlow.callback = null // free up any references
} catch (ignored: Exception) {
}
}
View: CardViewItemMedia
后面如果动态样式过多,则抽象为delegate模式
class CardViewItemMedia(
context: Context?,
array: AttributeSet?
) :
CardViewItem(context, array) {
enum class CardViewItemMediaStyleType(val itemCount: Int) {
HOME(1),
ITEM(2)
}
class CardViewItemMediaData(
eventId: String,
var dataType: CardViewItemMediaDataType,
var title: String,
var authorHead: String?,
var authorName: String?,
var cover: String,
var views: String? = "",
var duration: String? = "",
var size: String? = ""
) : CardViewItemData(eventId, "")
enum class CardViewItemMediaDataType {
NONE, VIDEO, MUSIC, MORE, WATERFALLS
}
enum class CardViewItemMediaElement {
COVER, VIEWS, SIZE, TITLE, AUTHOR_ICON, AUTHOR_NAME, DOWNLOAD, ACTION_MORE
}
var root: View? = null
var card: View? = null
private var titles = mutableListOf<TextView?>()
private var durations = mutableListOf<TextView?>()
var cover: RoundedImageView? = null
var iconType: ImageView? = null
var authorIcon: ImageView? = null
var authorName: TextView? = null
var infoStyle1: View? = null
var infoStyle2: View? = null
var etxPanel1: View? = null
var etxPanel2: View? = null
var views: TextView? = null
var fileSize: TextView? = null
var download: ImageView? = null
var moreIcon: View? = null
init {
inflate(context, R.layout.lib_widget_rv_card_view_media, this)
root = findViewById(R.id.root)
card = findViewById(R.id.card)
cover = findViewById(R.id.cover)
iconType = findViewById(R.id.iconType)
authorIcon = findViewById(R.id.authorIcon)
authorName = findViewById(R.id.authorName)
views = findViewById(R.id.views)
fileSize = findViewById(R.id.fileSize)
download = findViewById(R.id.download)
infoStyle1 = findViewById(R.id.infoStyle1)
infoStyle2 = findViewById(R.id.infoStyle2)
etxPanel1 = findViewById(R.id.etxPanel1)
etxPanel2 = findViewById(R.id.etxPanel2)
titles.add(etxPanel1?.findViewById(R.id.title))
titles.add(etxPanel2?.findViewById(R.id.title))
durations.add(infoStyle1?.findViewById(R.id.duration))
durations.add(infoStyle2?.findViewById(R.id.duration))
moreIcon = etxPanel2?.findViewById(R.id.moreIcon)
}
fun setStyle(
style: CardViewItemMediaStyleType = CardViewItemMediaStyleType.HOME
): CardViewItemMedia {
return when (style) {
CardViewItemMediaStyleType.HOME -> {
setSizeRadio(1.71f)
}
CardViewItemMediaStyleType.ITEM -> {
setSizeRadio(1.71f)
}
}
}
fun setSizeRadio(
radio: Float = 1f
): CardViewItemMedia {
root?.layoutParams?.width = ViewGroup.LayoutParams.MATCH_PARENT
card?.post {
val cardWidth = card?.width ?: -1
card?.layoutParams?.height = (cardWidth / radio).toInt()
card?.requestLayout()
}
return this
}
fun setSize(
cardWidth: Int = 0,
cardHeight: Int = 0,
dpi: Boolean = true
): CardViewItemMedia {
root?.layoutParams?.width =
if (cardWidth == ViewGroup.LayoutParams.WRAP_CONTENT
|| cardWidth == ViewGroup.LayoutParams.MATCH_PARENT
)
cardWidth else if (dpi) ScreenUtils.dp2px(context, cardWidth) else cardWidth
card?.layoutParams?.height =
if (cardHeight == ViewGroup.LayoutParams.WRAP_CONTENT
|| cardHeight == ViewGroup.LayoutParams.MATCH_PARENT
)
cardHeight else if (dpi) ScreenUtils.dp2px(context, cardHeight) else cardHeight
return this
}
override fun <Data : CardViewItemData> setData(
data: Data,
clicker: CardViewItemClicker?
) {
super.setData(data, clicker)
val cardViewData = data as CardViewItemMediaData
arrayText(titles, cardViewData.title, CardViewItemMediaElement.TITLE)
GlideImageLoader().loadImage(context, cardViewData.cover, cover, null)
cover?.setOnClickListener { callClicker(CardViewItemMediaElement.COVER) }
infoStyle1?.setOnClickListener { callClicker(CardViewItemMediaElement.VIEWS) }
infoStyle2?.setOnClickListener { callClicker(CardViewItemMediaElement.VIEWS) }
when (cardViewData.dataType) {
CardViewItemMediaDataType.NONE -> {
iconType?.setImageResource(R.drawable.lib_widget_icon_music_icon)
infoStyle1?.visibility = View.GONE
etxPanel1?.visibility = View.GONE
}
CardViewItemMediaDataType.MUSIC -> {
iconType?.setImageResource(R.drawable.lib_widget_icon_music_icon)
infoStyle1?.visibility = View.VISIBLE
etxPanel1?.visibility = View.VISIBLE
}
CardViewItemMediaDataType.VIDEO -> {
iconType?.setImageResource(R.drawable.lib_widget_icon_video_icon)
infoStyle1?.visibility = View.VISIBLE
etxPanel1?.visibility = View.VISIBLE
}
CardViewItemMediaDataType.MORE -> {
iconType?.setImageResource(R.drawable.lib_widget_icon_video_icon)
infoStyle2?.visibility = View.VISIBLE
etxPanel2?.visibility = View.VISIBLE
}
CardViewItemMediaDataType.WATERFALLS -> {
iconType?.setImageResource(R.drawable.lib_widget_icon_video_icon)
infoStyle1?.visibility = View.VISIBLE
etxPanel1?.visibility = View.VISIBLE
etxPanel1?.findViewById<View>(R.id.download)?.visibility = View.GONE
}
}
GlideImageLoader().loadImage(context, cardViewData.authorHead, authorIcon, null)
authorIcon?.setOnClickListener { callClicker(CardViewItemMediaElement.AUTHOR_ICON) }
cardViewData.authorName?.let {
authorName?.text = it
authorName?.visibility = View.VISIBLE
authorName?.setOnClickListener { callClicker(CardViewItemMediaElement.AUTHOR_NAME) }
}
cardViewData.views?.let {
views?.text = it
views?.visibility = View.VISIBLE
views?.setOnClickListener { callClicker(CardViewItemMediaElement.VIEWS) }
}
cardViewData.size?.let {
fileSize?.text = it
fileSize?.visibility = View.VISIBLE
fileSize?.setOnClickListener { callClicker(CardViewItemMediaElement.SIZE) }
}
arrayText(durations,
cardViewData.duration,
CardViewItemMediaElement.VIEWS)
download?.setOnClickListener { callClicker(CardViewItemMediaElement.DOWNLOAD) }
moreIcon?.setOnClickListener { callClicker(CardViewItemMediaElement.ACTION_MORE) }
}
private fun arrayText(
array: MutableList<TextView?>,
text: String?,
element: CardViewItemMediaElement?
) {
array.forEach { view ->
view?.text = text ?: ""
view?.setOnClickListener {
callClicker(element)
}
}
}