自定义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 ArrayListmData; // 宽高 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;i mData){ 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);// ArrayListdatas = 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); }}
阅读全文
0 0
- 自定义View练习1
- HenCoder 自定义 View 1-1 练习项目
- 自定义View小练习
- 自定义View练习
- 自定义View练习
- 自定义View练习
- 自定义View练习
- 自定义View练习
- 自定义View练习一
- 自定义view-canvas练习
- 自定义View练习2
- android自定义View练习之波浪View
- Android 自定义View练习之水波纹
- 自定义 view 练习(2):卫星式菜单
- 自定义View练习(一)饼状图
- 自定义View练习(二)二阶贝塞尔曲线
- 自定义 view 练习(1):用 HorizontalScrollView 实现自定义侧滑菜单
- 新手自定义view练习实例之(二) 波浪view
- koa开发详解
- C++性能系列之map的使用误区
- php流程控制流程图解
- OpenCV的cv::Mat转换为Qt的QImage是歪斜失真
- win10系统arp绑定
- 自定义View练习1
- 关于maven项目搭建并发布到linux(tomcat)
- 如何搭建自己的博客
- 命令模式
- Cause: java.lang.NumberFormatException: For input string: "a"
- mysql 查询优化浅谈
- 【基础算法】(08)五大常用算法之四:回溯法
- css的display样式中block,inline和inline-block的区别
- Android Studio XML布局文件设置代码自动补齐快捷键