安卓自定义view记录

2023-09-06  本文已影响0人  皓皓amous
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
上一篇 下一篇

猜你喜欢

热点阅读