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 }