自定义View练习1

来源:互联网 发布:在银行当程序员 编辑:程序博客网 时间:2024/05/28 14:56
各种练习
package com.bwie.customview_exercise_928;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;public class RectView extends View {    int mWidth= 0,mHeight = 0;    private Paint paint;    private Paint paint1;    private Paint paint2;    public RectView(Context context) {        super(context);    }    public RectView(Context context, AttributeSet attrs) {        super(context, attrs);    }    public RectView(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);//        canvas.drawColor(Color.RED);        paint = new Paint();        paint1 = new Paint();        initPaint();        canvas.drawPoint(200,200,paint);        canvas.drawPoints(new float[]{500,500,500,600,500,700},paint);        canvas.drawLine(300,300,500,600,paint);        canvas.drawLines(new float[]{100,200,200,200,100,300,200,300},paint1);        canvas.drawRect(100,100,800,800,paint1);        圆角矩形        RectF rectF = new RectF(100,100,800,400);        canvas.drawRoundRect(rectF,30,30,paint1);        椭圆        RectF rectF = new RectF(100,100,800,400);        canvas.drawOval(rectF,paint1);        圆// 绘制一个圆心坐标在(500,500),半径为400 的圆        canvas.drawCircle(500,500,400,paint1);        绘制圆弧        RectF rectF = new RectF(100,700,600,1200);        canvas.drawRect(rectF,paint1);        canvas.drawArc(rectF,0,90,true,paint);        描边        canvas.drawCircle(200,200,100,paint2);        位移画布         在坐标原点绘制一个黑色圆形        canvas.translate(200,200);        canvas.drawCircle(0,0,100,paint);        canvas.translate(200,200);        canvas.drawCircle(0,0,100,paint1);        //缩放        canvas.translate(mWidth/2,mHeight/2);        //绘制矩形        RectF rectF = new RectF(0,-400,400,0);        canvas.drawRect(rectF,paint1);        //实现画布缩放        //当缩放比例为负数的时候会根据缩放中心轴进行翻转        canvas.scale(-0.5f,-0.5f);        canvas.drawRect(rectF,paint);        canvas.translate(mWidth/2,mHeight/2);        //催眠图        RectF rectF = new RectF(-400,-400,400,400);        for (int i=0;i<20;i++){            canvas.scale(0.9f,0.9f);            canvas.drawRect(rectF,paint2);        }        旋转        canvas.translate(mWidth/2,mHeight/2);        RectF rectF = new RectF(0,-400,400,0);        canvas.drawRect(rectF,paint2);        canvas.rotate(180,200,0);        canvas.drawRect(rectF,paint2);        旋转小demo        canvas.translate(mWidth/2,mHeight/2);        //画两个圆        canvas.drawCircle(0,0,400,paint2);        canvas.drawCircle(0,0,380,paint2);        for (int i=0;i<=360;i+=10){            canvas.drawLine(0,380,0,400,paint2);            canvas.rotate(10);        }        //借切(skew)    特殊类型的线性变换。        canvas.translate(mWidth/2,mHeight/2);        RectF rectF = new RectF(0,0,200,200);        canvas.drawRect(rectF,paint2);        // 水平错切 <- 45度        canvas.skew(1,0);        canvas.skew(0,1);        canvas.drawRect(rectF,paint2);    }    @Override    protected void onSizeChanged(int w, int h, int oldw, int oldh) {        super.onSizeChanged(w, h, oldw, oldh);        mWidth = w;        mHeight = h;    }    private void initPaint() {        paint.setColor(Color.GREEN);        paint.setStyle(Paint.Style.FILL);        paint.setStrokeWidth(10f);        paint1.setColor(Color.RED);        paint1.setStyle(Paint.Style.FILL);        paint1.setStrokeWidth(10f);        //描边        paint2 = new Paint();        paint2.setStyle(Paint.Style.STROKE);        paint2.setColor(Color.BLACK);        paint2.setStrokeWidth(10f);    }}

扇形
import android.content.Context;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.RectF;import android.util.AttributeSet;import android.util.Log;import android.view.View;import java.util.ArrayList;/** *  * 制作饼状图 */public class PieView extends View {    // 颜色表 (注意: 此处定义颜色使用的是ARGB,带Alpha通道的)    private int[] mColors = {0xFFCCFF00, 0xFF6495ED, 0xFFE32636, 0xFF800000, 0xFF808000, 0xFFFF8C69, 0xFF808080,            0xFFE6B800, 0xFF7CFC00};    // 饼状图初始绘制角度    private float mStartAngle = 0;    // 数据    private ArrayList mData;    // 宽高    private int mWidth, mHeight;    // 画笔    private Paint mPaint = new Paint();    public PieView(Context context) {//        super(context,null);        this(context,null);    }    public PieView(Context context, AttributeSet attrs) {        super(context, attrs);        mPaint.setStyle(Paint.Style.FILL);        mPaint.setAntiAlias(true);    }    public PieView(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);    }    @Override    protected void onSizeChanged(int w, int h, int oldw, int oldh) {        super.onSizeChanged(w, h, oldw, oldh);        mWidth = w;        mHeight = h;    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        if(mData==null){            return;        }        float currentStartAngle = mStartAngle;//当前起始角度        canvas.translate(mWidth/2,mHeight/2);// 将画布坐标原点移动到中心位置        float r = (float) (Math.min(mWidth, mHeight) / 2 * 0.8);// 饼状图半径;        RectF rectF = new RectF(-r,-r,r,r);// 饼状图绘制区域        for (int i = 0;imData){        this.mData = mData;        initData(mData);        invalidate();//刷新    }    /**     * 初始化数据     * @param mData     */    private void initData(ArrayList mData) {        if(null==mData||mData.size()==0){            return;        }        float sumValue = 0;        for (int i=0;i

PieData
/** * Created by 樊健翔 on 2017/9/28. */public class PieData {    String name;//名字    float value;//数值    float percentage;//百分比    //非用户关心的数据    int color = 0;//颜色    float angle = 0;//角度    public PieData(String name, float value) {        this.name = name;        this.value = value;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public float getValue() {        return value;    }    public void setValue(float value) {        this.value = value;    }    public float getPercentage() {        return percentage;    }    public void setPercentage(float percentage) {        this.percentage = percentage;    }    public int getColor() {        return color;    }    public void setColor(int color) {        this.color = color;    }    public float getAngle() {        return angle;    }    public void setAngle(float angle) {        this.angle = angle;    }}

activity_main
    

在MainActivity中实现扇形逻辑
package com.bwie.customview_exercise_928;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);//        PieView view = new PieView(this);//        setContentView(view);//        ArrayList datas = new ArrayList<>();//        PieData pieData1 = new PieData("sloop",60);//        PieData pieData2 = new PieData("sloop",30);//        PieData pieData3 = new PieData("sloop",40);//        PieData pieData4 = new PieData("sloop",20);//        PieData pieData5 = new PieData("sloop",20);//        datas.add(pieData1);//        datas.add(pieData2);//        datas.add(pieData3);//        datas.add(pieData4);//        datas.add(pieData5);//        view.setData(datas);    }}







原创粉丝点击