Android绘图机制(三)——自定义View的实现方式以及半弧圆新控件
Android绘图机制(三)——自定义View的三种实现方式以及实战项目操作
在Android绘图机制(一)——自定义View的基础属性和方法
里说过,实现自定义View有三种方式,分别是1.对现有的控件进行扩展
2.通过组件来实现新的控件
3.重写View来实现全新的控件所以本节就来带大家把这个流程走一遍,我们用到的项目还是
Android绘图机制(二)——自定义View绘制形, 圆形, 三角形, 扇形, 椭圆, 曲线,文字和图片的坐标讲解
本节现在就是做一个真正意义上的自定义View的操作了注意本节的项目来自于《Android群英传》中的几个小例子
一.对现有的控件进行扩展之自定义TextView
我们新建一个Class类TextView继承TextView
package com.lgl.view.view;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
/**
* Created by LGL on 2016/1/10.
*/
public class TextView extends android.widget.TextView {
private Paint paint1, paint2;
public TextView(Context context) {
super(context);
}
public TextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onDraw(Canvas canvas) {
//实例化画笔
paint1 = new Paint();
//给画笔1设置颜色
paint1.setColor(getResources()
.getColor(android.R.color.holo_blue_light));
//给画笔1设置Style
paint1.setStyle(Paint.Style.FILL);
//实例化画笔
paint2 = new Paint();
//给画笔2设置颜色
paint2.setColor(Color.YELLOW);
//给画笔2设置Style
paint2.setStyle(Paint.Style.FILL);
//绘制外层矩形
canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(), paint1);
//绘制内层矩形
canvas.drawRect(10, 10, getMeasuredWidth() - 10, getMeasuredHeight() - 10, paint2);
canvas.save();
//父类完成的方法,即绘制完成
super.onDraw(canvas);
}
}
截图
二.重写View来实现全新的控件
市面上有许许多多的APP,他们之中有很多的控件都不是原生的,而是需要我们自定义View的
package com.lgl.view.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 android.view.WindowManager;
/**
* 半弧圆
* Created by LGL on 2016/1/10.
*/
public class RCircleView extends View {
//弧的画笔
private Paint rpaint;
//圆的画笔
private Paint cpaint;
//文字的画笔
private Paint tvpaint;
//屏幕高宽
private int width, height;
//文字
private String text = "绘制半弧圆";
public RCircleView(Context context) {
super(context);
init();
}
public RCircleView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
//获取屏幕的宽高
//Android绘图机制(一)——自定义View的基础属性和方法里面有讲
WindowManager wm = (WindowManager) getContext()
.getSystemService(Context.WINDOW_SERVICE);
width = wm.getDefaultDisplay().getWidth();
height = wm.getDefaultDisplay().getHeight();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//实例化画笔,以及设置属性,颜色,文字大小
rpaint = new Paint();
rpaint.setStyle(Paint.Style.STROKE);
cpaint = new Paint();
tvpaint = new Paint();
tvpaint.setColor(Color.WHITE);
tvpaint.setTextSize(20);
//绘制弧线的区域矩形
RectF mArcRectF = new RectF((float) (width * 0.1), (float) (width * 0.1), (float) (width * 0.9), (float) (width * 0.9));
//绘制圆
canvas.drawCircle(width / 2, width / 2, (float) (width * 0.5 / 3), cpaint);
//绘制弧线
canvas.drawArc(mArcRectF, 270, 240, false, rpaint);
//这样绘制的话,会出现偏差的,文字以圆形的中心开始绘制
canvas.drawText(text, width / 2, width / 2, tvpaint);
}
}
截图
这里,你会疑惑,为什么文字不是居中?我们来画个图
这个还是比较基础的,下一节我们就来点新的玩法
Demo下载:本系列最后一节提供
Android绘图机制(三)——自定义View的实现方式以及半弧圆新控件的更多相关文章
- Android绘图机制(二)——自定义View绘制形, 圆形, 三角形, 扇形, 椭圆, 曲线,文字和图片的坐标讲解
Android绘图机制(二)--自定义View绘制形, 圆形, 三角形, 扇形, 椭圆, 曲线,文字和图片的坐标讲解 我们要想画好一些炫酷的View,首先我们得知道怎么去画一些基础的图案,比如矩形,圆 ...
- Android绘图机制(一)——自定义View的基础属性和方法
Android绘图机制(一)--自定义View的基础属性和方法 自定义View看起来,确实看起来高深莫测,很多Android开发都不是特别在行这一块,这里面的逻辑以及一些绘画都是有一点难的,说一下我目 ...
- Android群英传》读书笔记 (3) 第六章 Android绘图机制与处理技巧 + 第七章 Android动画机制与使用技巧
第六章 Android绘图机制与处理技巧 1.屏幕尺寸信息屏幕大小:屏幕对角线长度,单位“寸”:分辨率:手机屏幕像素点个数,例如720x1280分辨率:PPI(Pixels Per Inch):即DP ...
- Android群英传笔记——第六章:Android绘图机制与处理技巧
Android群英传笔记--第六章:Android绘图机制与处理技巧 一直在情调,时间都是可以自己调节的,不然世界上哪有这么多牛X的人 今天就开始读第六章了,算日子也刚好一个月了,一个月就读一半,这效 ...
- Android绘图机制(四)——使用HelloCharts开源框架搭建一系列炫酷图表,柱形图,折线图,饼状图和动画特效,抽丝剥茧带你认识图表之美
Android绘图机制(四)--使用HelloCharts开源框架搭建一系列炫酷图表,柱形图,折线图,饼状图和动画特效,抽丝剥茧带你认识图表之美 这里为什么不继续把自定义View写下去呢,因为最近项目 ...
- Android ——利用OnDraw实现自定义View(转)
自定义View的实现方式大概可以分为三种,自绘控件.组合控件.以及继承控件.本文将介绍自绘控件的用法.自绘控件的意思是,这个控件上的内容是用onDraw函数绘制出来的.关于onDraw函数的介绍可参看 ...
- Android特效专辑(三)——自定义不一样的Toast
Android特效专辑(三)--自定义不一样的Toast 大家都知道,Android的控件有时候很难满足我们的需求,所以我们需要自定义View.自定义的方式很多,有继承原生控件也有直接自定义View的 ...
- 【转】Android M新控件之AppBarLayout,NavigationView,CoordinatorLayout,CollapsingToolbarLayout的使用
Android M新控件之AppBarLayout,NavigationView,CoordinatorLayout,CollapsingToolbarLayout的使用 分类: Android UI ...
- 【转】Android M新控件之FloatingActionButton,TextInputLayout,Snackbar,TabLayout的使用
Android M新控件之FloatingActionButton,TextInputLayout,Snackbar,TabLayout的使用 分类: Android UI2015-06-15 16: ...
随机推荐
- 从操作系统内核看Java非阻塞IO事件检测
非阻塞服务器模型最重要的一个特点是,在调用读取或写入接口后立即返回,而不会进入阻塞状态.在探讨单线程非阻塞IO模型前必须要先了解非阻塞情况下Socket事件的检测机制,因为对于非阻塞模式最重要的事情是 ...
- 【Netty源码学习】ServerBootStrap
上一篇博客[Netty源码学习]BootStrap中我们介绍了客户端使用的启动服务,接下来我们介绍一下服务端使用的启动服务. 总体来说ServerBootStrap有两个主要功能: (1)调用父类Ab ...
- Python图片处理库之PIL
这个模块对于Python2.7 的windows64位电脑而言,还真的是不好找啊.这里分享一个下载链接吧,需要的朋友可以下载下来.PIL For Windows64 Python2.7下面分享一下这个 ...
- Servlet之cookie处理
Cookies 通常设置在 HTTP 头信息中(虽然JavaScript 也可以直接在浏览器上设置一个 Cookie).设置 Cookie 的 Servlet 会发送如下的头信息: HTTP/1.1 ...
- Servlet配置与资源参数
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; // 继承HttpServlet 类 public cla ...
- 1gitolite构建git服务器
软件环境:在有网络条件下(主要是为了安装软件),UbuntuKylin 14.04 1 安装openssh-serveropenssh-client,如果用的是VPS之类的一般都默认安装好了,不 ...
- Maven创建EJB
开发工具: eclipse mars wildfly jdk8 maven 右键新建project,选择other 勾选create simple project 填写信息(自行填写),完成后右键项目 ...
- 【unix网络编程第三版】阅读笔记(四):TCP客户/服务器实例
本篇博客主要记录一个完整的TCP客户/服务器实例的编写,以及从这个实例中引发的对僵死进程的处理等问题. 1. TCP客户/服务器功能需求 本实例完成以下功能: (1) 客户从标准输入读入一行文本,并写 ...
- UNIX环境高级编程——网络编程常用函数及结构
IP地址的转换 #include <arpa/inet.h> int inet_aton(const char *strptr, struct i ...
- python安装MySQLdb:在windows下或linux下(以及eclipse中pydev使用msqldb的配置方法)
写的非常好,可以解决问题: windows下:http://blog.csdn.net/wklken/article/details/7253245 linux下:http://blog.csdn.n ...