美文网首页
安卓自定义view记录

安卓自定义view记录

作者: 皓皓amous | 来源:发表于2023-09-06 16:24 被阅读0次
1.
          public Rect(int left, int top, int right, int bottom) {
                  this.left = left;
                  this.top = top;
                  this.right = right;
                  this.bottom = bottom;
              }

4个属性
              1.public int left;
              2.public int top;
              3.public int right;
              4.public int bottom;
rect.png rect2.png rect3.png
  这四个属性不单单描述了这个 长方形4个点的坐标,间接的描述出这个长方形的尺寸
      长 = bottom - top
      宽 = right – left


2.
        canvas.drawRoundRect(rect, 200f, 200f, mPaint)
            2个属性
                  float rx:生成圆角的椭圆的X轴半径
                  float ry:生成圆角的椭圆的Y轴半径
rondrect.png
3.
   public void drawText (String text, float x, float y, Paint paint)
          2个属性
                1.public  float x;
                2.public  float y;
    x,y并不是指定文字的中点位置,并且x,y与文字对齐方式有关(通过setTextAlign()指定,默认为left)
txt1.PNG txt2.PNG

https://cloud.tencent.com/developer/article/1742083

package com.example.myapplication;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.WindowManager;

import androidx.annotation.Nullable;

/**
* @author Administrator
* @version V1.0
* @date 2023/9/7
* @Description:
*/
public class TestView extends View {

  private Paint paint;
  private Rect rect;
  private Paint rectPaint;

  public TestView(Context context) {
      super(context);
      intView();
  }

  public TestView(Context context, @Nullable AttributeSet attrs) {
      super(context, attrs);
      intView();
  }

  public TestView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
      super(context, attrs, defStyleAttr);
      intView();
  }

  public TestView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
      super(context, attrs, defStyleAttr, defStyleRes);
      intView();
  }

  private void intView() {
      paint = new Paint();
      paint.setAlpha(50);
      paint.setColor(Color.parseColor("#FF018786"));
      paint.setAntiAlias(true);
      paint.setTextSize(90);
      paint.setTextAlign(Paint.Align.CENTER);

      rectPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
      rectPaint.setColor(Color.parseColor("#FFBB86FC"));
      rectPaint.setStyle(Paint.Style.STROKE);

  }

  @Override
  protected void onDraw(Canvas canvas) {
      super.onDraw(canvas);
      String str = "test富发牌嘎嘣看";
      canvas.drawText(str,getWidth()/2,getHeight()/2,paint);

      
      Paint.FontMetrics fontMetrics = paint.getFontMetrics();
      float ascent = fontMetrics.ascent;
      int descent = (int) (fontMetrics.descent);
      float leading = fontMetrics.leading;
      int strHeight = (int) (descent - ascent - leading);


      int screenWith = getResources().getDisplayMetrics().widthPixels;
      int screenHeigh = getResources().getDisplayMetrics().heightPixels;
      rect = new Rect();
      paint.getTextBounds(str, 0, str.length(), rect);
      int strWidth = rect.width();
      int startX = (screenWith - strWidth) / 2;
      int startY = (screenHeigh - strHeight) / 2;
      canvas.drawRect(startX , startY - strHeight, startX + strWidth, startY , rectPaint);

  }
}


给圆设置了路径宽度,便需要该路径宽度也计算在内:所以这个圆的半径事实上应该是:View宽度/2 - 路径宽度/2, 只有这样才能容纳要绘制的View,否则多余的部分就看不见了。(包括圆环)
     mPaint.setColor(mDownloadBackgroundRingColor);
      mPaint.setStyle(Paint.Style.STROKE);
      mPaint.setStrokeWidth(mDownloadBackgroundRingSize);
      float cx = mViewWidth / 2;
      float cy = mViewHeight / 2;
      float radius = mViewWidth / 2 - mDownloadBackgroundRingSize / 2;
      canvas.drawCircle(cx, cy, radius, mPaint);

      // Draw progress ring
      mPaint.setColor(mDownloadProgressBarColor);
      float margin = mDownloadBackgroundRingSize / 2;
      mDownloadBackgroundRingRect.set(margin, margin, mViewWidth - margin, mViewHeight - margin);
      canvas.drawArc(mDownloadBackgroundRingRect, -90, 90, false, mPaint);    

rondrect6.png test.png round.PNG 20190411151822427.jpg

相关文章

  • 学习自定义View的一些文章

    安卓自定义View基础:坐标系 安卓自定义View基础:角度弧度 安卓自定义View基础:颜色 Android自定...

  • 安卓自定义View教程-1

    基础篇 安卓自定义View基础 - 坐标系 安卓自定义View基础 - 角度弧度 安卓自定义View基础 - 颜色...

  • 安卓画笔setShadowLayer与SetMaskFilter

    安卓自定义 View 踩坑笔记,特作文记录 安卓 Paint 类用于自定义 View 时↑这两个方法能用来干嘛我就...

  • [转]自定义View的学习

    原文连接 如何关闭硬件加速 自定义View 基础篇 安卓自定义View基础 - 坐标系 安卓自定义View基础 -...

  • 自定义View教程目录

    参考安卓自定义View教程目录

  • Android View的滑动方式

    自定义View是安卓进阶的基础,是安卓开发者不得不学习的知识点,而酷炫的自定义View效果也是离不开View的滑动...

  • Android Touch System(一)

    前言 之前写了一篇文章是关于自定义控件的。在学习自定义view的时候顺便把安卓的touch system(安卓触摸...

  • android开发之简单的自定义view

    自定义view是安卓开发进阶中的重要阶段。所以想在这方面多花些时间看看,写写。 自定义view的步骤: 1、自定义...

  • 自定义View之组合View

    前言 自定义View是安卓开发中比较重要的一环,很多地方都需要用到自定义View。而自定义View比较常见的一种形...

  • 自定义View-初体验

    本篇主要面向初学者,已熟悉自定义 View 的童鞋可以飘过了。 自定义 View 很难么? 刚学习安卓不久后,也会...

网友评论

      本文标题:安卓自定义view记录

      本文链接:https://www.haomeiwen.com/subject/oggkvdtx.html