关于Android的各个View的介绍

本篇将介绍Android一些冷门View的使用

关于Android的各个View的介绍

本篇已Kotlin为主要语言

介绍的功能皆为最新功能

  1. Toolbar

    • 设置标题

      1
      app:title="这里是标题"
    • 设置标题前的图标

      1
      app:navigationIcon="@drawable/ic_baseline_arrow_back"

    • 是否选择在当前的布局当时是否以“视差”的方式来跟随滚动

      1
      app:layout_collapseMode="pin"

      其实就是让这个View的滚动的速度比其他正常滚动的View速度稍微慢一点

      关于CollapsingToolbarLayout与Toolbar联动使用
      • 设置上滑到Toolbar高度时,Toolbar的背景以及过度颜色

        1
        app:contentScrim=”?attr/colorPrimary”

        当上滑到toolbar 高度期间直到达到toolbar高度时,给toolbar设置的背景色,以及过渡颜色。当然,这里不仅仅可以设置颜色,也可以设置图片。 如果不设置该属性,标题栏会过渡为以之前的图片为背景

      • 设置Toolbar Title位置

        1
        app:expandedTitleGravity=”center_horizontal”
      • 设置Toolbar Title距离开始位置的边距

        1
        app:expandedTitleMarginStart=”50dp”
    • 设置Toolbar文字颜色

  2. Activity跳转动画

    • overridePendingTransition()

      这个方法用来覆盖即将到来的跳转动画,也就是说使用这个方法可以替换原本的跳转动画

    • overridePendingTransition()的调用时机

      这个方法需要在startActivity()或者finish()之后立即调用

      1
      2
      3
      4
      5
      6
      val intent = Intent(activity, MainActivity::class.java)
      activity.startActivity(intent)
      activity.overridePendingTransition(
      R.anim.anim_slide_enter_bottom,
      R.anim.anim_no_anim
      )

      overridePendingTransition()需要传入两个参数,第一个为进入动画,第二个为退出动画

      这些资源都需要在anim文件夹中创建

  3. ObjectAnimator

    • ObjectAnimator派生自ValueAnimator,所以ValueAnimator能用的方法,ObjectAnimator都能用, ObjectAnimator 是ValueAnimator的子类。

    • 例子展示

      1
      2
      3
      4
      5
      6
      7
      8
      private val objectAnimator: ObjectAnimator by lazy {
      ObjectAnimator.ofFloat(binding.ivCover, ANIMATION_PROPERTY_NAME, 0f, 360f).apply {
      interpolator = LinearInterpolator()
      duration = DURATION_CD//设置动画时间
      repeatCount = ANIMATION_REPEAT_COUNTS
      start()
      }
      }

      ObjectAnimator.ofFloat接收4个参数

      第一个:进行动画的View

      第二个:需要进行动画的属性

      第三个:起始值

      第四个:结束值

    • ObjectAnimator的函数

      1. 改变旋转度数 rotation、rotationX、rotationY
        • rotation:表示围绕 Z 旋转,rotation 表示旋转度数
        • rotationX:表示围绕X旋转,rotationX表示旋转度数
        • rotationY:表示微软Y旋转,rotationY表示旋转度数
      2. 移动 translationX、translationY
        • float translationX:表示在X轴上移动的距离,以当前控件为原点,向右为正方向,参数 translationX 表示移动的距离
        • float translationY:表示在Y轴上移动的距离,以当前控件为原点,向下位正方向,参数 translationY 表示移动的距离
      3. 缩放 scaleX、scaleY
        • float scaleX:在X轴上缩放,scaleX表示缩放倍数
        • float scaleY:在Y轴上缩放,scaleY表示缩放倍数
      4. 改变透明度 alpha
        • float alpha:控制View的透明度
    • 自定义ObjectAnimator的属性

      • 只需要确保View需要改变属性有公开的 set’() / get() 方法即可

        1
        2
        3
        class Circle(  //圆的半径
        var radius: Int
        )

        接下来只需要给它创建一个set/get方法

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        23
        class MyPointView(context: Context?, attrs: AttributeSet?) : View(context, attrs) {
        private val mCircle: Circle? = Circle(0)
        protected fun onDraw(canvas: Canvas) {
        if (mCircle != null) {
        val paint = Paint()
        paint.setAntiAlias(true)
        paint.setColor(Color.RED)
        paint.setStyle(Paint.Style.FILL)
        canvas.drawCircle(400, 500, mCircle.getRadius(), paint)
        }
        super.onDraw(canvas)
        }

        //set函数
        //get函数
        var circleRadius: Int
        get() = 800
        set(radius) {
        mCircle.setRadius(radius)
        invalidate()//invalidate()请求重绘View树,也就是刷新View
        }

        }

        在Activity中使用

        1
        2
        3
        4
        val animator = ObjectAnimator.ofInt(view, "circleRadius", 40, 400)
        animator.interpolator = BounceInterpolator()
        animator.duration = 2000
        animator.start()
  4. DataBingding与ViewBinding

    • dataBinding

      1. 在Model的build.gradle中开启dataBinding

        1
        2
        3
        4
        5
        android{
        buildFeatures{
        dataBinding = true
        }
        }

        在Android Stuio 4.0以上时,只能使用buildFeatures来进行管理

      2. 在Xml中开启

        将光标移到第一行第一位,按下键盘”ALT+ENTER”选择第一个创建binding layout即可

      3. 在Activity中引入

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        class MainActivity : BaseActivity(), View.OnClickListener {
        //先申明为延迟初始化
        private lateinit var binding: ActivityMainBinding

        override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        //使用DataBindingUtil来进行载入布局
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
        }
        }
      4. 使用

        1
        2
        binding.randomText.text = "当前随机参数为:${it?.get(0)?.randomName}"
        binding.randomCountLast.text = "随机次数为:${it?.get(0)?.randomNum}"

        直接使用binding.xxx来引用View

    • viewBinding

      1. 在Model的build.gradle中开启dataBinding

        1
        2
        3
        4
        5
        6
        android {
        ...
        buildFeatures{
        viewBinding = true
        }
        }
      2. 开启之后,系统将会自动的生成绑定类

      3. 在Activity中使用

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        class MainActivity : BaseActivity(), View.OnClickListener {
        //先申明为延迟初始化
        private lateinit var binding: ActivityMainBinding

        override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        //将不需要指明Layout文件
        binding = ActivityMainBinding.inflate(layoutInflater)
        }
        }

        剩下的与dataBinding一致

5.