• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android自定义控件系列案例【四】

Android自定义控件系列案例【四】

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android 自定义控件,android中自定义控件,android自绘控件,android 自定控件,android 动态添加控件等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android自定义控件系列案例【四】


案例效果:

\

模拟器上运行有些锯齿,真机上和预期一样好

案例分析:

看效果,第一直觉肯定是Android原生态控件中没有这样的控件实现这种效果,自然想到应该需要自定义控件了,没错,这就是通过自定义控件来绘制的一个圆环进度条。仔细分析发现这个效果的进度条应该由几个部分组成,首先是无进度时的浅色圆环,然后是一个随进度变化的深色圆弧,而中间部分是一个深蓝色的实心圆,最后就是显示进度百分比的文字。这几部分大部分都是图形,所以使用图形绘制技术应该可以绘制出分部分效果,然后加上进度控制部分应该心里就有底了。</div>

技术实现:

按照上面的分析我们一部分一部分的来实现。先大概列一个步骤:</div> </div>
重写onDraw()方法的目的是为了找到绘制图形的时机与场所。</div>
</div>
需求准备Paint画笔,并设置画笔宽度,颜色,样式等,然后绘制圆环。</div>
</div>
重置Paint画笔,并设置画笔颜色,绘制进度圆弧。</div>
</div>
测试进度圆弧是否会随进度的变化正常工作。</div>
</div>
重置Paint画笔,并设置画笔颜色,绘制实心圆。</div>
</div>
计算进度百分比,绘制文本。</div>
</div>  </div> </div>
package com.kedi.myprogressbar;

import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.View;

public class MyProgressBar extends View {

	public MyProgressBar(Context context) {
		this(context, null);
	}
	public MyProgressBar(Context context, AttributeSet attrs) {
		this(context, attrs, 0);
	}
	public MyProgressBar(Context context, AttributeSet attrs, int defStyleAttr) {
	     super(context, attrs, defStyleAttr);
		
	}

	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);

	}

}

有了自定义MyProgressBar,此时就可以在XML布局中先占位了,下面是XML布局文件。</div>


    
    

    

 

绘制浅色圆环

 

</div> </div>
</div>
|- new Paint() 创建画笔</div>
|-setColor() 设置画笔颜色</div>
|-setStyle()设置画笔样式(Paint.Style.STROKE 虚框样式,Paint.Style.FILL 实心样式)</div>
|-setStrokeWidth()设置画笔线宽</div>
|-setAntiAlias()消除锯齿或毛边</div>
|-setTextSize()设置画文本时的文本大小</div>
|-setTypeface()设置画文本时的文本字体</div>
 </div>
</div>
|-drawCircle(cx, cy, radius, paint)绘制圆环或圆。cx,cy:圆心坐标,radius:圆半径,paint:画笔。</div>
|-drawText(text, x, y, paint)绘制文本。text:文本,x,y:文本坐标,paint:画笔。</div>
|-drawArc(oval, startAngle, sweepAngle, useCenter, paint)绘制圆弧。</div>
oval:矩形区域,用来确定圆弧形状和大小。new RectF(left, top, right, bottom)确定一个矩形区域。</div>
startAngle:圆弧始端角度。</div>
sweepAngle:圆弧末端角度。</div>
paint:画笔。</div>
userCenter:设置是否显示圆弧的两边线条,false时只画圆弧没有两边,true时带两边。如下图:</div>
</div> 有了这些技术准备,绘制工作将一路顺利。为了进行接下来的绘制工作,先在初始化方法中创建一个空画笔。</div>
public class MyProgressBar extends View {
	private Paint paint;// 画笔
	public MyProgressBar(Context context) {
		this(context, null);
	}
	public MyProgressBar(Context context, AttributeSet attrs) {
		this(context, attrs, 0);
	}
	public MyProgressBar(Context context, AttributeSet attrs, int defStyleAttr) {
	     super(context, attrs, defStyleAttr);
	     init();		
	}
	/**
	 * 初始化方法
	 */
	private void init() {
	    paint = new Paint();		
	}
	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);

	}

}
接下来绘制浅色圆环</div> </div>
private int roundW;// 圆环宽
/**
 * 初始化方法
 */
private void init() {
   paint = new Paint();
 //初始化圆环宽,这里考虑了适配把15dp进行了对应平台的像素转换。
 roundW = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 15, getResources().getDisplayMetrics());

}
	       // 1.圆心(x,y)坐标值
		int centerX = getWidth() / 2;
		int centerY = centerX;
		// 2.圆环半径
		int radius1 = (centerX - roundW / 2);
		// 3.设置圆环颜色(浅色)
		paint.setColor(Color.parseColor("#11339ED4"));
		// 4.设置画笔的风格
		paint.setStyle(Paint.Style.STROKE);
		// 5.设置画圆环的宽度
		paint.setStrokeWidth(roundW);
		// 6.消除锯齿
		paint.setAntiAlias(true);
		// 7.画圆环
		canvas.drawCircle(centerX, centerY, radius1, paint);
</div>


</div>
</div>

package com.kedi.myprogressbar;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.View;

public class MyProgressBar extends View {
	private Paint paint;// 画笔
	private int roundW;// 圆环宽

	public MyProgressBar(Context context) {
		this(context, null);
	}

	public MyProgressBar(Context context, AttributeSet attrs) {
		this(context, attrs, 0);
	}

	public MyProgressBar(Context context, AttributeSet attrs, int defStyleAttr) {
		super(context, attrs, defStyleAttr);
		init();
	}

	/**
	 * 初始化方法
	 */
	private void init() {
		paint = new Paint();
		// 初始化圆环宽,这里考虑了适配把15dp进行了对应平台的像素转换。
		roundW = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 15, getResources().getDisplayMetrics());
	}

	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		// 绘制浅色圆环
		// 1.圆心(x,y)坐标值
		int centerX = getWidth() / 2;
		int centerY = centerX;
		// 2.圆环半径
		int radius1 = (centerX - roundW / 2);
		// 3.设置画大圆环颜色
		paint.setColor(Color.parseColor("#11339ED4"));
		// 4.设置画




 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 自定义控件详解(四):Paint 画笔路径效果,paint画笔
  • 自定义控件详解(五):onMeasure()、onLayout(),onmeasureonlayout
  • 自定义控件详解(二):Path类 相关用法,详解path
  • 自定义控件详解(一):Paint类与Canvas类,paintcanvas
  • Android中的自定义控件(二),android自定义控件
  • 自定义控件(一),自定义控件(
  • 自定义数字加减控件,自定义数字控件
  • 自定义控件——开关按钮ToggleButton,控件togglebutton
  • Android 自定义分层级筛选控件
  • Android自定义控件系列案例【四】

相关文章

  • 2017-05-26Android 5.0 Settings源码简要分析
  • 2017-05-26android 图片加载库 Glide 的使用介绍,
  • 2017-05-26Android 旋转屏幕--处理Activity与AsyncTask的最佳解决方案,androidasynctask
  • 2017-05-26Android 性能分析工具之 TraceView 使用说明
  • 2017-05-26Android Native crash日志分析,androidcrash
  • 2017-05-26Android开发常用小功能
  • 2017-05-26DB2_Tips_Tricks_04 远程数据库之间复制数据
  • 2017-05-26Intent之运输大队长,Intent之运输队长
  • 2017-05-26OKHttp,okhttp使用
  • 2017-05-26linux tcp GSO和TSO实现

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • android studio下百度地图sdk的初体验
    • 安卓DJ113舞曲网应用客户端 项目源码(服务器+客户端),安卓dj113
    • volley框架的使用
    • Android之侧滑导航栏,android滑导航栏
    • FragmentTabHost的基本用法,fragmenttabhost
    • Android 6.0 开发者对系统权限的使用与练习(Permissions Best Practices)
    • android support的作用及其常见错误的解决,androidsupport
    • android studio 使用checkstyle全攻略
    • android开发游记:SpringView 下拉刷新的高效解决方案,定制你自己风格的拖拽页面
    • 依赖ConstraintLayout报错,Could not find *****,Failed to resolve:*****,constraintlayout

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有