• Android自定义视图


    View

    自定义视图主要涉及四个方面:绘图交互性能封装

    绘图

    主要涉及两个对象:画布(Canvas)画笔(Paint),画布主要解决画什么的问题,在画布上可以绘制各种各样的图形,可以通过移动、放大、缩小等来实现不同的效果;画笔主要解决如何画、怎么画的问题,通过控制画笔的大小,线条的粗细,路径上所要实现的特殊效果(填充、文字大小、字体等)

    交互

    涉及触摸(TouchEvent)和动画(Animation),设计触摸或手势动作过程中引发的动画效果,如过渡、渐变等

    性能

    绘图的onDraw()方法工作在主线程上,要考虑主线程安全问题,遇到复杂的绘制内容可能会导致用户界面卡顿,此时可以考虑使用SurfaceView开辟出另一个绘画的表面,使用副线程绘图

    封装

    一方面可以将一些属性(Attributes)封装起来,在自定义视图时就可以通过这些属性去设置视图的一些特性;另一方面考虑到视图的通用性,需要计算它们的尺寸(Measure),如果是在特定的场合使用,可以不考虑尺寸问题,但如果是泛用性广的视图,类似于控件,就需要考虑尺寸问题

    帧速率

    在这里插入图片描述
    需要在16ms内绘制完所有内容,否则会掉帧

    生命周期

    在这里插入图片描述
    measure():测量自身尺寸

    layout():将要放置的位置

    因为有60帧的限制,只能通过dispatchToDraw()调度告诉系统将要在下一个帧来临时绘制图形

    通过invalidate()通知系统在下一帧来临时刷新视图

    FindMe(路径与遮罩)

    找到隐藏在阴影下的脸,实现效果如下:

    在这里插入图片描述

    1. 创建一个FindMe类继承于View,在R.layout.activity_main.xml中拖入一个view,类型改为FindMe,填充整个屏幕
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout 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"
    
        <com.example.myblog.FindMe
            android:id="@+id/findMe"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    
    </RelativeLayout>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    1. 在FindMe中设置一个drawableToBitamp方法将图片资源转换为位图对象用于接下来的绘制
    private Bitmap drawableToBitamp(Drawable drawable){
       
        Bitmap bitmap = null;
        //图片位深,PixelFormat.OPAQUE代表没有透明度,RGB_565就是没有透明度的位深,否则就用ARGB_8888
        Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565;
        //创建一个空的Bitmap,大小为100X100
        bitmap = Bitmap.createBitmap(100,
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    你知道企业到什么阶段必须数字化转型吗?
    【LEACH协议】无线传感器网络LEACH与DEEC协议【含Matlab源码 2187期】
    【C++】C++入门(中)--引用
    基于开源模型搭建实时人脸识别系统(三):人脸关键点、对齐模型概览与模型选型
    Perl文件锁机制:守护你的数据安全
    Linux parted 分区命令详解
    C++设计模式-中介者模式,游戏对象之间的碰撞检测
    HTML5+CSS3小实例:点画文字悬停效果
    MongoDB——将时间戳转换为日期
    VUE实现Office文档在线编辑,支持doc/docx、xls/xlsx、ppt/pptx、pdf等
  • 原文地址:https://blog.csdn.net/fjnu_se/article/details/128168515