• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.airbnb.lottie.samples.views
2 
3 import android.content.Context
4 import android.graphics.Color
5 import android.util.AttributeSet
6 import android.view.View
7 import android.widget.ImageView
8 import android.widget.LinearLayout
9 import androidx.annotation.DrawableRes
10 import androidx.core.content.ContextCompat
11 import androidx.core.graphics.drawable.DrawableCompat
12 import androidx.core.view.isVisible
13 import androidx.core.view.setPadding
14 import com.airbnb.lottie.samples.R
15 import com.airbnb.lottie.samples.databinding.ItemViewControlBarBinding
16 import com.airbnb.lottie.samples.utils.getText
17 import com.airbnb.lottie.samples.utils.viewBinding
18 
19 class ControlBarItemToggleView @JvmOverloads constructor(
20     context: Context,
21     attrs: AttributeSet? = null,
22     defStyleAttr: Int = 0
23 ) : LinearLayout(context, attrs, defStyleAttr) {
24     private val binding: ItemViewControlBarBinding by viewBinding()
25 
26     init {
27         orientation = HORIZONTAL
28         setBackgroundResource(R.drawable.control_bar_item_view_background)
29         setPadding(resources.getDimensionPixelSize(R.dimen.control_bar_button_padding))
<lambda>null30         attrs?.let {
31             val typedArray = context.obtainStyledAttributes(it, R.styleable.ControlBarItemToggleView, 0, 0)
32 
33             val textRes = typedArray.getResourceId(R.styleable.ControlBarItemToggleView_text, 0)
34             if (textRes != 0) {
35                 binding.textView.text = getText(textRes)
36             }
37 
38             val drawableRes = typedArray.getResourceId(R.styleable.ControlBarItemToggleView_src, 0)
39             if (drawableRes == 0) {
40                 binding.imageView.isVisible = false
41             } else {
42                 binding.imageView.setImageResource(drawableRes)
43             }
44 
45             typedArray.recycle()
46         }
47     }
48 
childDrawableStateChangednull49     override fun childDrawableStateChanged(child: View) {
50         super.childDrawableStateChanged(child)
51         if (child is ImageView && child.drawable != null) {
52             val color =
53                 if (child.isActivated) Color.WHITE
54                 else ContextCompat.getColor(context, R.color.control_bar_content_unactivated)
55             DrawableCompat.setTint(child.drawable.mutate(), color)
56         }
57     }
58 
getTextnull59     fun getText() = binding.textView.text.toString()
60 
61     fun setText(text: String) {
62         binding.textView.text = text
63     }
64 
setImageResourcenull65     fun setImageResource(@DrawableRes drawableRes: Int) {
66         binding.imageView.setImageResource(drawableRes)
67         childDrawableStateChanged(binding.imageView)
68     }
69 }