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: ...
随机推荐
- GridView如何适配不同屏幕
GridView和ListView一样,都是项目中常用的控件之一,那么本篇文章要讲的是GridView如何适应不同大小的屏幕,首先,我们来看一张效果图,如下: 每行为四个item,上下左右间距大概2d ...
- [ExtJS5学习笔记]第二十一节 Extjs5中使用config配置给ext.widget或者create方法传递参数
本文地址:http://blog.csdn.net/sushengmiyan/article/details/39252805 官方例子:http://docs.sencha.com/extjs/5. ...
- 安卓AsyncTack详解
我们知道安卓中的UI线程不是线程安全的,即不能在UI线程中进行耗时操作,所以我们通常的做法是开启一个子线程来进行耗时操作,然后将处理后的结果运用Handler机制传递给UI线程,在UI线程中根据处理后 ...
- [django]项目打包构建
django项目的结构大体上都是类似,打包主要的功能就是把一些不需要部署的文件剔除,把需要部署的文件直接压缩打包. 这里还想集成一个配置文件模板生成配置文件的过程,或者写一个配置文件生成的工具,不用每 ...
- UNIX网络编程——基本TCP套接字编程
一.基于TCP协议的网络程序 下图是基于TCP协议的客户端/服务器程序的一般流程: 服务器调用socket().bind().listen()完成初始化后,调用accept()阻塞等待,处于监听端口的 ...
- 未完成的IT路停在回车键---2014年末总结篇
时间都去哪儿了? 一晃而过,越来越能体会到这个词的真实感.特别是过了二十岁,这种感觉越来越深刻,越来越强烈,犹如小编做公交车的时候一直向后排排倒的香樟树,还记得有首歌叫时间都哪儿了,而 ...
- SpringMVC返回json是设置编辑等消息头,消息头信息介绍(respone.setHeader,这个从网上获取)
1. SpringMVC中设置消息头,例子如下: ? 因为上面的代码没有添加该文件的编码说明 , WEB应用程序在将jsp翻译成class文件时 , 把该字符串的内容按默认的保存方式指定的编码ASC ...
- Leetcode_38_count-and-say
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/41257397 The count-and-say sequ ...
- C#中的泛型化方法的实现
在一个基本数据类型的方法中求解最大值或者最小值是一件很方便,同时也是很简单的事.但是如果你想复用这个方法,我们就需要使用到泛型编程的概念了.这就好比是C++中的模板函数,或者java中的泛型操作.相比 ...
- pig基础知识总结
Pig Latin UDF语句 REGISTER 在Pig运行时环境中注册一个JAR文件 DEFINE 为UDF.流式脚本或命令规范新建别名 Pig Latin命令类型 kill ...