Android 自定义View 之 RectF用法详解

简介: Android 自定义View 之 RectF用法详解

在之前通过Circle画了一个奥运五环,这次通过RectF来画矩形,常规的就是长方形正方形之类的。


20200813174307117.png


还是新建一个自定义View,CustomViewRectF,然后继承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));
    }
}


运行一下:


20200813170743216.png


这个看到就是这样的。


然后改一下

paint.setStyle(Paint.Style.STROKE);//空心

20200813170709866.png


可以看到左边有一部分被遮挡住了


再画长方形


RectF rectF = new RectF(10,10,100,200);//长方形


然后运行


20200813171731374.png


再多画几个长方形


    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));


20200813172201694.png


再改一下

    RectF rectF = new RectF(10,10,100,200);//长方形
        canvas.drawRect(rectF, customPaint(Color.GREEN));
        RectF rectF2 = new RectF(100,10,190,200);//长方形2
        canvas.drawRect(rectF2, customPaint(Color.YELLOW));
        RectF rectF3 = new RectF(190,10,280,200);//长方形3
        canvas.drawRect(rectF3, customPaint(Color.BLUE));
        RectF rectF4 = new RectF(280,10,370,200);//长方形4
        canvas.drawRect(rectF4, customPaint(Color.RED));

20200813172457291.png


再通过改边top的位置,形成从低到高

    RectF rectF = new RectF(10,160,100,200);//长方形
        canvas.drawRect(rectF, customPaint(Color.GREEN));
        RectF rectF2 = new RectF(100,120,190,200);//长方形2
        canvas.drawRect(rectF2, customPaint(Color.YELLOW));
        RectF rectF3 = new RectF(190,80,280,200);//长方形3
        canvas.drawRect(rectF3, customPaint(Color.BLUE));
        RectF rectF4 = new RectF(280,40,370,200);//长方形4
        canvas.drawRect(rectF4, customPaint(Color.RED));


运行一下


20200813172714316.png


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


  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));


运行一下


20200813173913460.png


再改一下:

    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));


20200813174307117.png


画矩形记住一点,bottom - top等于矩形的高度,right - left 等于矩形的宽度就可以了。相信你的理解已经很深了吧。


相关文章
|
2月前
|
缓存 前端开发 Android开发
安卓开发中的自定义视图:从零到英雄
【10月更文挑战第42天】 在安卓的世界里,自定义视图是一块画布,让开发者能够绘制出独一无二的界面体验。本文将带你走进自定义视图的大门,通过深入浅出的方式,让你从零基础到能够独立设计并实现复杂的自定义组件。我们将探索自定义视图的核心概念、实现步骤,以及如何优化你的视图以提高性能和兼容性。准备好了吗?让我们开始这段创造性的旅程吧!
32 1
|
3月前
|
数据可视化 Android开发 开发者
安卓应用开发中的自定义View组件
【10月更文挑战第5天】在安卓应用开发中,自定义View组件是提升用户交互体验的利器。本篇将深入探讨如何从零开始创建自定义View,包括设计理念、实现步骤以及性能优化技巧,帮助开发者打造流畅且富有创意的用户界面。
116 0
|
2月前
|
XML 前端开发 Android开发
Android:UI:Drawable:View/ImageView与Drawable
通过本文的介绍,我们详细探讨了Android中Drawable、View和ImageView的使用方法及其相互关系。Drawable作为图像和图形的抽象表示,提供了丰富的子类和自定义能力,使得开发者能够灵活地实现各种UI效果。View和ImageView则通过使用Drawable实现了各种图像和图形的显示需求。希望本文能为您在Android开发中使用Drawable提供有价值的参考和指导。
47 2
|
2月前
|
搜索推荐 前端开发 Android开发
安卓应用开发中的自定义视图实现
【10月更文挑战第30天】在安卓开发的海洋中,自定义视图是那抹不可或缺的亮色,它为应用界面的个性化和交互体验的提升提供了无限可能。本文将深入探讨如何在安卓平台创建自定义视图,并展示如何通过代码实现这一过程。我们将从基础出发,逐步引导你理解自定义视图的核心概念,然后通过一个实际的代码示例,详细讲解如何将理论应用于实践,最终实现一个美观且具有良好用户体验的自定义控件。无论你是想提高自己的开发技能,还是仅仅出于对安卓开发的兴趣,这篇文章都将为你提供价值。
|
2月前
|
Android开发 开发者 UED
安卓开发中自定义View的实现与性能优化
【10月更文挑战第28天】在安卓开发领域,自定义View是提升应用界面独特性和用户体验的重要手段。本文将深入探讨如何高效地创建和管理自定义View,以及如何通过代码和性能调优来确保流畅的交互体验。我们将一起学习自定义View的生命周期、绘图基础和事件处理,进而探索内存和布局优化技巧,最终实现既美观又高效的安卓界面。
44 5
|
3月前
|
缓存 数据处理 Android开发
在 Android 中使用 RxJava 更新 View
【10月更文挑战第20天】使用 RxJava 来更新 View 可以提供更优雅、更高效的解决方案。通过合理地运用操作符和订阅机制,我们能够轻松地处理异步数据并在主线程中进行 View 的更新。在实际应用中,需要根据具体情况进行灵活运用,并注意相关的注意事项和性能优化,以确保应用的稳定性和流畅性。可以通过不断的实践和探索,进一步掌握在 Android 中使用 RxJava 更新 View 的技巧和方法,为开发高质量的 Android 应用提供有力支持。
|
3月前
|
缓存 调度 Android开发
Android 在子线程更新 View
【10月更文挑战第21天】在 Android 开发中,虽然不能直接在子线程更新 View,但通过使用 Handler、AsyncTask 或 RxJava 等方法,可以实现子线程操作并在主线程更新 View 的目的。在实际应用中,需要根据具体情况选择合适的方法,并注意相关的注意事项和性能优化,以确保应用的稳定性和流畅性。可以通过不断的实践和探索,进一步掌握在子线程更新 View 的技巧和方法,为开发高质量的 Android 应用提供支持。
46 2
|
3月前
|
XML 前端开发 Android开发
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
|
3月前
|
XML 前端开发 Android开发
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
29 2
|
3月前
|
XML 前端开发 Android开发
Android View的绘制流程和原理详细解说
Android View的绘制流程和原理详细解说
56 3