画布Canvas 画笔Paint
package com.example.m_evolution.View; 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; import com.example.m_evolution.MyApp; import static com.example.m_evolution.MyApp.COORDINATE_LENGTH;
import static com.example.m_evolution.MyApp.COORDINATE_ORIGIN_X;
import static com.example.m_evolution.MyApp.COORDINATE_ORIGIN_Y;
import static com.example.m_evolution.MyApp.STR_MOOD; public class CoordinateView extends View {
private Paint mPaint; public CoordinateView(Context context) {
this(context, null);
} public CoordinateView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
} public CoordinateView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
mPaint = new Paint();
mPaint.setColor(Color.BLACK);
mPaint.setAntiAlias(true);
mPaint.setStrokeCap(Paint.Cap.ROUND);
mPaint.setStrokeWidth(4);
} @Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint_coordinate = new Paint();
paint_coordinate.setColor(Color.rgb(207,207,207));
paint_coordinate.setAntiAlias(true);
paint_coordinate.setStrokeCap(Paint.Cap.ROUND);
paint_coordinate.setStrokeWidth(8);
// 画出坐标轴
int widthScreen = MyApp.getScreenWidth(getContext());
int leftX = (int)((COORDINATE_ORIGIN_X-COORDINATE_LENGTH/2)*widthScreen); //x轴左边坐标
int rightX = (int)((COORDINATE_ORIGIN_X+COORDINATE_LENGTH/2)*widthScreen); //x轴右边坐标
int topY = (int)((COORDINATE_ORIGIN_Y-COORDINATE_LENGTH/2)*widthScreen); //y轴上边坐标
int bottomY = (int)((COORDINATE_ORIGIN_Y+COORDINATE_LENGTH/2)*widthScreen); //y轴下边坐标
int centerX = (leftX+rightX)/2; //原点的x坐标
int centerY = (topY+bottomY)/2; //原点的y坐标
int radiusCoordinate = (rightX-leftX)/2; //轴的长度
canvas.drawLine(leftX,centerY,rightX,centerY,paint_coordinate); //画出x轴
canvas.drawLine(centerX,topY,centerX, bottomY, paint_coordinate); //画出x轴 //画圆
Paint paint_circle = new Paint();
paint_circle.setColor(Color.rgb(207,207,207));
paint_circle.setAntiAlias(true);
paint_circle.setStyle(Paint.Style.STROKE); //设置为描边,即只画边缘,不然的话就画出实心的圆
paint_circle.setStrokeCap(Paint.Cap.ROUND);
paint_circle.setStrokeWidth(4);
canvas.drawCircle(centerX,centerY,((float)Math.sqrt((double)2)/3)*radiusCoordinate,paint_circle);
canvas.drawCircle(centerX,centerY,((float)Math.sqrt((double)8)/3)*radiusCoordinate,paint_circle); //画圆弧
// Paint paint_circle = new Paint();
// paint_circle.setColor(Color.rgb(207,207,207));
// paint_circle.setAntiAlias(true);
// paint_circle.setStyle(Paint.Style.STROKE); //设置为描边,即只画边缘,不然的话就画出实心的圆
// paint_circle.setStrokeCap(Paint.Cap.ROUND);
// paint_circle.setStrokeWidth(4);
// RectF oval = new RectF(centerX-((float)Math.sqrt((double)2)/3)*radiusCoordinate, centerY-((float)Math.sqrt((double)2)/3)*radiusCoordinate, centerX+((float)Math.sqrt((double)2)/3)*radiusCoordinate, centerY+((float)Math.sqrt((double)2)/3)*radiusCoordinate);
//第四个boolean参数表示要不要连接原点,具体效果与paint_circle.setStyle(Paint.Style.STROKE)相关联。
//第二个参数是从哪个角度开始画,第三个参数是顺时针扫多少角度
// canvas.drawArc(oval,0,360,false,paint_circle); //画出八个关键点
Paint paint_mood_point = new Paint();
paint_mood_point.setAntiAlias(true);
paint_mood_point.setStrokeCap(Paint.Cap.ROUND);
paint_mood_point.setStrokeWidth(10);
paint_mood_point.setColor(Color.BLUE);
//八个心情点的位置
float[][] arr_mood_point = new float[][]{{2f/3f,2f/3f}, {1f/3f, 1f/3f}, {1f/3f, -1f/3f}, {2f/3f, -2f/3f}, {-2f/3f, -2f/3f}, {-1f/3f, -1f/3f}, {-1f/3f, 1f/3f},{-2f/3f, 2f/3f}};
for(int i = 0;i<8; i++){
canvas.drawPoint((float)centerX+arr_mood_point[i][0]*(float)radiusCoordinate,(float)centerY-arr_mood_point[i][1]*(float)radiusCoordinate,paint_mood_point);
} //画出四个轴点
Paint paint_xy_point = new Paint();
paint_xy_point.setAntiAlias(true);
paint_xy_point.setStrokeCap(Paint.Cap.ROUND);
paint_xy_point.setStrokeWidth(20);
paint_xy_point.setColor(Color.rgb(207,207,207));
//四个轴点位置
float[][] arr_xy_point = new float[][]{{1,0}, {-1, 0}, {0, 1}, {0, -1}};
for(int i = 0;i<4; i++){
canvas.drawPoint((float)centerX+arr_xy_point[i][0]*(float)radiusCoordinate,(float)centerY-arr_xy_point[i][1]*(float)radiusCoordinate,paint_xy_point);
} //写出相应的字
Paint paint_text = new Paint();
// paint_text.setAntiAlias(true);
// paint_text.setStrokeCap(Paint.Cap.ROUND);
// paint_text.setStrokeWidth(10);
paint_text.setTextSize(30f);
paint_text.setColor(Color.BLACK);
paint_text.setTextAlign(Paint.Align.CENTER);
//八个心情的文字
for(int i = 0;i<8; i++){
canvas.drawText(STR_MOOD[i],(float)centerX+arr_mood_point[i][0]*(float)radiusCoordinate,(float)centerY-arr_mood_point[i][1]*(float)radiusCoordinate,paint_text);
}
//四个坐标下标的文字
String str_xy[] = {"正能量", "负能量", "高压", "低压"};
//横纵坐标的下标位置
float[][] arr_point2 = new float[][]{{1f+0.13f,0f}, {-1f-0.13f, 0f}, {0f, 1f+0.05f}, {0f, -1f-0.1f}};
for(int i = 0;i<4; i++){
canvas.drawText(str_xy[i],(float)centerX+arr_point2[i][0]*(float)radiusCoordinate,(float)centerY-arr_point2[i][1]*(float)radiusCoordinate,paint_text);
}
}
}
画布Canvas 画笔Paint的更多相关文章
- 【Android】自己定义View、画家(画布)Canvas与画笔Paint的应用——绘图、涂鸦板app的实现
利用一个简单的绘图app来说明安卓的图形处理类与自己定义View的应用. 例如以下图,有一个供用户自己随意绘图.涂鸦的app. 这里不做那么花俏了,仅提供黑白两色.但能够改变笔尖的粗细. 实质上这里的 ...
- java 图形化小工具Abstract Window Toolit :画笔Graphics,画布Canvas(),弹球小游戏
画笔Graphics Java中提供了Graphics类,他是一个抽象的画笔,可以在Canvas组件(画布)上绘制丰富多彩的几何图和位图. Graphics常用的画图方法如下: drawLine(): ...
- android Canvas 和 Paint用法
自定义view里面的onDraw方法,在这里我们可以绘制各种图形,onDraw里面有两个API我们需要了解清楚他们的用法:Canvas 和 Paint. Canvas翻译成中文就是画布的意思,Canv ...
- 自定义View(4)Canvas和Paint常用绘制函数
画布Canvas 在Android下进行2D绘图需要Canvas类的支持,它位于"android.graphics.Canvas"包下,直译过来为画布的意思,用于完成在View上的 ...
- 安卓自定义控件(一)Canvas、Paint、Shader、Xfermode
关于自定义控件,之前就写过一篇自定义控件,上图下字的Button,图片任意指定大小,但是使用效果还是让人感觉不幸福,这次索性彻彻底底地对自定义控件做一次彻彻底底的总结. 我会花4篇博客来介绍自定义控件 ...
- Android查缺补漏(View篇)--自定义View利器Canvas和Paint详解
上篇文章介绍了自定义View的创建流程,从宏观上给出了一个自定义View的创建步骤,本篇是上一篇文章的延续,介绍了自定义View中两个必不可少的工具Canvas和Paint,从细节上更进一步的讲解自定 ...
- Android为TV端助力 Canvas 和 Paint用法
自定义view里面的onDraw方法,在这里我们可以绘制各种图形,onDraw里面有两个API我们需要了解清楚他们的用法:Canvas 和 Paint. Canvas翻译成中文就是画布的意思,Canv ...
- 【Android】21.2 2D图形图像处理(Canvas和Paint)
分类:C#.Android.VS2015: 创建日期:2016-03-19 一.Canvas对象简介 画布(Canvas对象)是与System.Drawing或iOS核心图形等传统框架非常类似的另一种 ...
- Android Canvas和Paint基本使用
这篇文章主要介绍下画笔Paint和画布Canvas的基本使用 1.Paint 创建对象Paint mPaint = new Paint(); 常用的基本方法有 : mP ...
随机推荐
- innodb使用大字段text,blob的一些优化建议(转)
原文 https://yq.aliyun.com/articles/9072 最近看到一些老应用,在表结构的设计上使用了text或者blob的字段:其中一个应用,对blob字段的依赖非常的严重,查询和 ...
- python之路——26
复习 1.python没有接口类,有抽象类, 通过abc模块 本质是用来做代码规范用的,在子类中实现和父类方法名完全一样的方法2.在java的角度看,是有区别的 java没有多继承,为了接口隔离原则, ...
- 使用aliyun cli工具快速创建云主机
参考文档: https://help.aliyun.com/document_detail/25484.html?spm=a2c4g.11186623.3.2.b57vQp 步骤 创建AccessID ...
- Linux SVN 操作详解(转)
1.将文件checkout到本地目录 svn checkout path(path是服务器上的目录) 例如:svn checkout svn://192.168.1.1/pro/domain ...
- js 连接mqtt
js连接mqtt 项目中要用到mqtt,前端调用,使用github开源的paho-mqtt.js,api还是挺全面的,网上各种教程很全面,但是感觉代码过于杂乱,故而封装的一下.仿jquery ajax ...
- LDAP目录服务
LDAP目录服务 1.ldap目录服务介绍: 目录是一类为了浏览和搜索数据而设计的特殊的数据库,目录服务是按树状形式存储信息的,目录包含基于属性的描述信息,并且支持高级的过滤功能,一般来说,目录不支持 ...
- TestLink环境搭建及用例导入
以下是笔者亲身实践,精心挑选出来的比较好的博文: CentOS7下TestLink环境的部署 https://blog.csdn.net/fxsok244969309/article/details/ ...
- 解决由于服务器调用删除或添加字段后CXF客户端未更新导致异常问题org.apache.cxf.interceptor.Fault: Unmarshalling Error: Unexpected element
采用CXF客户端调用Webservice服务,由于服务端时不时会对Webservice服务删除或添加一些字段,而CXF未及时更新客户端代码导致再次调用服务时报异常错误: Interceptor for ...
- TCP协议-连接建立和释放
三次握手: (1)客户端向服务器端TCP请求连接,向服务器端发送控制位SYN=1,序号seq=x的请求报文.(x是随机产生的,且不能为0) (2)服务器端接收到请求报文后,若同意建立连接,则向客户端发 ...
- 关于c# Debug和Release的区别 (转)
关于Debug和Release的区别之讨论本文主要包含如下内容: 1. Debug 和 Release 编译方式的本质区别2. 哪些情况下 Release 版会出错2. 怎样“调试” Release ...