首页 > 其他分享 >Android开发 - onDraw通过RectF绘画矩形(RectF解析)

Android开发 - onDraw通过RectF绘画矩形(RectF解析)

时间:2024-07-23 17:18:16浏览次数:10  
标签:customPaint 10 canvas Color onDraw RectF new Android

RectF的参数解析

  • RectF(float left, float top, float right, float bottom);:可见四个参数均为float(浮点数)类型,其参数为:
    1. left:左边坐标;在绘制中常表示为起点的Y轴坐标
    2. top:上边左边;在绘制中常表示为起点的X轴坐标
    3. right:右边坐标;在绘制中常表示为终点的Y轴坐标
    4. bottom:下边坐标;在绘制中常表示为终点的Y轴坐标

onDraw通过RectF绘画矩形

  • 新建一个自定义ViewCustomViewRectF,然后继承View,实现里面的两个基本的构造方法,这样就可以在布局中显示了,自定义View代码如下:

    package com.llw.paintdemo;
    
    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.graphics.RectF;
    import android.util.AttributeSet;
    import android.view.View;
    
    import androidx.annotation.Nullable;
    
    public class CustomViewRectF extends View {
    
        public CustomViewRectF(Context context) {
            super(context);
        }
    
        public CustomViewRectF(Context context, @Nullable AttributeSet attrs) {
            super(context, attrs);
        }
    
        private Paint customPaint(int color) {
            Paint paint = new Paint();
            paint.setColor(color);//画笔颜色
            paint.setStyle(Paint.Style.FILL);//实心
            paint.setStrokeWidth(6);//画笔宽度
            paint.setAntiAlias(true);//光滑
            return paint;
        }
    
        /**
         * 在纸上画矩形
         * @param canvas 纸
         */
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
    
            /**
             * 画矩形  以两个点来画,起点和终点,通常是左上为起点,右下为终点  以下面这个图来看
             * 参数一:起点的Y轴坐标
             * 参数二:起点的X轴坐标
             * 参数三:终点的Y轴坐标
             * 参数四:终点的Y轴坐标
             * 
             *      *  
             *      *  
             *      *  top
             *  ****************
             *      *          *
             * left *          *  right
             *      *          * 
             *      *          *
             *      ******************
             *         bottom  *
             *                 *
             *                 *
             *  可以看到,左和上无限延长就会在一个点,右和下也是如此,这样应该理解了吧           
             *      
             */
            RectF rectF = new RectF(10,10,200,200);
            canvas.drawRect(rectF, customPaint(Color.BLUE));
            
        }
    
    }
    
  • 实际效果:

  • 通过修改paint(画笔)部分代码修改为空心

    paint.setStyle(Paint.Style.STROKE);//空心
    
  • 实际效果:

  • 通过修改paint(画笔)部分代码修改为长方形

    RectF rectF = new RectF(10,10,100,200);//长方形
    
  • 实际效果:

  • 通过paint(画笔)添加部分代码修改为多个长方形

    RectF rectF2 = new RectF(120,10,210,200);//长方形2
    canvas.drawRect(rectF2, customPaint(Color.BLUE));
    
    RectF rectF3 = new RectF(240,10,330,200);//长方形3
    canvas.drawRect(rectF3, customPaint(Color.BLUE));
    
    RectF rectF4 = new RectF(360,10,450,200);//长方形4
    canvas.drawRect(rectF4, customPaint(Color.BLUE));
    
  • 实际效果:

  • 再整体改一下形成旋转的效果

    RectF rectF = new RectF(10,10,300,100);//长方形
    canvas.drawRect(rectF, customPaint(Color.GREEN));
    
    RectF rectF2 = new RectF(300,10,390,300);//长方形2
    canvas.drawRect(rectF2, customPaint(Color.YELLOW));
    
    RectF rectF3 = new RectF(100,300,390,390);//长方形3
    canvas.drawRect(rectF3, customPaint(Color.BLUE));
    
    RectF rectF4 = new RectF(10,100,100,390);//长方形4
    canvas.drawRect(rectF4, customPaint(Color.RED));
    
  • 实际效果:

  • 再改一下形成花式旋转的效果

    RectF rectF = new RectF(10,100,300,190);//长方形
    canvas.drawRect(rectF, customPaint(Color.GREEN));
    
    RectF rectF2 = new RectF(300,10,390,300);//长方形2
    canvas.drawRect(rectF2, customPaint(Color.YELLOW));
    
    RectF rectF3 = new RectF(190,300,480,390);//长方形3
    canvas.drawRect(rectF3, customPaint(Color.BLUE));
    
    RectF rectF4 = new RectF(100,190,190,480);//长方形4
    canvas.drawRect(rectF4, customPaint(Color.RED));
    
  • 实际效果:

标签:customPaint,10,canvas,Color,onDraw,RectF,new,Android
From: https://www.cnblogs.com/ajunjava/p/18319051

相关文章

  • 【Android】ListView和RecyclerView知识总结
    文章目录ListView步骤适配器AdpterArrayAdapterSimpleAdapterBaseAdpter效率问题RecyclerView具体实现不同布局形式的设置横向滚动瀑布流网格点击事件ListViewListView是Android中的一种视图组件,用于显示可滚动的垂直列表。每个列表项都是一个视图对象,ListVie......
  • Android开发 - onMeasure、onLayout和onDraw方法解析
    onLayout、onMeasure和onDraw方法介绍onMeasure(intwidthMeasureSpec,intheightMeasureSpec)onMeasure方法用于测量View的大小。在自定义View中,我们需要重写这个方法,根据自定义View.xml视图的宽高测量模式(MeasureSpec)来计算并设置自定义View的宽高MeasureSpec:测量规范,以......
  • 无法在 beeware 上启动 android
    这是错误安装新版本时发生错误。此时该怎么办。无法在beeware模拟器上启动,也无法通过USB调试在我的个人Android设备上启动。你能帮我解决这个问题吗?我是一个新手,第一次使用beeware。我很乐意帮助解决BeeWareAndroid模拟器问题。错误信息表明的Android......
  • Android开发 - ViewGroup解析与自定义
    ViewGroup解析ViewGroup是一个特殊的View,可以包含其他视图(称为子视图)。而ViewGroup是View的子类,所以ViewGroup可以当成普通的UI组件使用。ViewGroup是布局和视图容器的基类,该类还定义了ViewGroup.LayoutParams用作布局参数基类的类由于ViewGroup的直接子类和间接子类比较......
  • Android 10.0 Launcher3拖拽图标进入hotseat自适应布局功能实现四
    1.前言在10.0的系统rom定制化开发中,在对于launcher3的一些开发定制中,在对hotseat的一些开发中,需要实现动态hotseat居中的功能,就是在拖拽图标进入和拖出hotseat,都可以保持hotseat居中的功能,接下来分析下相关功能实现具体如图:hotseat2.Launcher3拖拽图标进入hotseat自......
  • 深入分析 Android ContentProvider (二)
    文章目录深入分析AndroidContentProvider(二)1.高级特性和常见使用场景1.1.使用ContentObserver监听数据变化示例:实现ContentObserver1.2.数据同步示例:实现SyncAdapter1.3.批量操作示例:批量操作1.4.权限控制示例:声明权限2.ContentProvider的设计总结......
  • Android开发 - LayoutParams解析
    LayoutParams翻译过来就是布局参数,子View通过LayoutParams告诉父容器(ViewGroup)应该如何放置自己。从这个定义中也可以看出来LayoutParams与ViewGroup是息息相关的,因此脱离ViewGroup谈LayoutParams是没有意义的。事实上,每个ViewGroup的子类都有自己对应的LayoutParams类,典型的如L......
  • android audio不同音频流,(六)settings内音频流音量调整
    (1)settings内,可设置音频流音量,如下图:(2)settings调整音量条进度,会触发SeekBarVolumizer对象:SeekBarVolumizer文件路径:frameworks/base/core/java/android/preference/SeekBarVolumizer.javaSeekBarVolumizer对象,handle会接到MSG_SET_STREAM_VOLUME事件:publicbooleanhandl......
  • android在一个TextView中设置不同字体大小、不同字体颜色封装
    一、概述在开发过程中遇到过这样一种业务,有很多单行文本字体。字符串中每一部分的字体样式、大小、颜色都不相同。传统的做法是放多个TextView以达到效果。但是当这个页面中的这样的元素非常多,且非常复杂的时候,就会出现页面加载缓慢的问题(view加载=深度(递归)+平铺),也就是......
  • Android开发 - Context解析
    Context是什么Context的中文翻译为:语境;上下文;背景;环境,在开发中我们经常说称之为“上下文”,那么这个“上下文”到底是指什么意思呢?在语文中,我们可以理解为语境,在程序中,我们可以理解为当前对象在程序中所处的一个环境,一个与系统交互的过程。比如微信聊天,此时的“环境”是指......