电商_了解自定义View

布局

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".activity.CanvasActivity">

    <com.example.myapplication.view.CanvasView
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</RelativeLayout>

Activity

package com.example.myapplication.activity;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.example.myapplication.R;

public class CanvasActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_canvas);
    }
}

自定义View

package com.example.myapplication.view;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;


public class CanvasView extends View {
    private Paint mPaint;

    public CanvasView(Context context) {
        super(context);
        Log.i("CanvasView","构造===1");
        init(context);
    }

    public CanvasView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        Log.i("CanvasView","构造===2");
        init(context);
    }

    public CanvasView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        Log.i("CanvasView","构造==3");
        init(context);
    }

    //初始化  画笔  路径等
    private void init(Context context) {
        //设置背景颜色
        setBackgroundColor(Color.parseColor("#222222"));
        mPaint = new Paint();
        mPaint.setColor(Color.WHITE);//设置颜色
        mPaint.setTextSize(36);//设置文字的大小
        mPaint.setStrokeWidth(10);//设置线的粗细
        mPaint.setAntiAlias(true);//设置抗锯齿
        mPaint.setTextAlign(Paint.Align.CENTER);//设置文字居中

    }


    //绘制
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        Log.i("CanvasView","onDraw");
        //几种常见的方法
        getWidth();//手机的宽度
        getRight();//手机的宽度
        getHeight();//手机的高度
        getBottom();//手机的高度
        getLeft();//距离左边
        getTop();//距离上边

        mPaint.setStyle(Paint.Style.FILL);//设置实心
        //绘制文字
        canvas.drawText("了解自定义View", getRight() / 2, 50, mPaint);

        //绘制线  横线
        canvas.drawLine(0, 100, getRight(), 100, mPaint);
        //绘制线  竖线
        canvas.drawLine(100, 0, 100, getBottom(), mPaint);

        mPaint.setStyle(Paint.Style.STROKE);//设置空心
        //绘制圆
        canvas.drawCircle(getRight() / 2, getBottom() / 2, 100, mPaint);

        //绘制矩形
        Rect rect = new Rect();
        rect.left = 200;
        rect.right = 300;
        rect.top = 200;
        rect.bottom = 300;
        canvas.drawRect(rect, mPaint);
    }

    //测量
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        Log.i("CanvasView","onMeasure");
        int width = MeasureSpec.getSize(widthMeasureSpec);
        int height = MeasureSpec.getSize(heightMeasureSpec);

        int mode = MeasureSpec.getMode(widthMeasureSpec);

        if (mode == MeasureSpec.AT_MOST) {//包裹内容
            Log.i("CanvasView","包裹==");
        } else if (mode == MeasureSpec.EXACTLY) {//精确模式
            Log.i("CanvasView","精确==");

        } else {
            Log.i("CanvasView","不对View做限制==");
        }

        //setMeasuredDimension(widthMeasureSpec,heightMeasureSpec);
    }

    //位置 设置子View的一个位置
    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
        super.onLayout(changed, left, top, right, bottom);
        Log.i("CanvasView","onLayout");
    }

    @Override
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();
        Log.i("CanvasView","onAttachedToWindow");
    }

    @Override
    protected void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        Log.i("CanvasView","onDetachedFromWindow");
    }
}

效果图
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43797842/article/details/88707961