2014-10-27Android学习------布局处理(六)------26个字母的布局列表的实现-----城市列表应用程序

我学习Android都是结合源代码去学习,这样比较直观,非常清楚的看清效果,觉得很好,今天的学习源码是网上找的个CityList 源码 百度搜就知道很多下载的地方

本节学习接上篇布局学习(二) 地址:http://blog.csdn.net/u014737138/article/details/40555359

这节虽然名字叫做布局处理  但是确实源码的实现  之所以这样写,个人感觉还是这里放着比较好


首先还是看看需要弄成什么样子的:

图片的右侧的字母列表就是我们需要实现的

废话不多说了,直接看代码是怎么写的把:

1.要显示26个字母,首先这个必须要定义的:

利用String数组存储它们:

String[] b = { "#", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };

2.要想做出这样一个效果,必须继承android.view.View类,然后使用画图功能去做出这样一个效果

得到屏幕的高度,每个字母的高度就是屏幕的高度除以字母的个数(也就是数组的长度)

每个字母的高度=屏幕的高度/字母的个数(数组的长度)

接下来就是用一个循环语句在画布Canvas上面画出这些字母


code:

public class MyLetterListView extends View {// 类必须继承View  ,再继承这个类的时候,必须写构造函数,Eciplse自动提示需要你去重写它的构造函数,那么我直接去写就行了


public MyLetterListView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}

public MyLetterListView(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
}


public MyLetterListView(Context context, AttributeSet attrs)
{
super(context, attrs);
}


这些构造函数我们不需要去管他们到底是什么意思,这里先不去分析他们,等有空我们再去讲他们,我们直接看怎么去画出那些字母的函数


当写完了构造函数之后,这个时候我们需要去重载这个类的void onDraw(Canvas canvas)函数   很重要  重点


@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
{

// 首先我们设置画布的背景颜色是  #400000   深紫色
canvas.drawColor(Color.parseColor("#40000000"));
}
int height = getHeight();//得到画布的高度  其实就是屏幕的高度
int width = getWidth();//得到画布的宽度
int singleHeight = height / b.length; // 每个字母的高度=屏幕的高度/数组的长度(26个字母)
for (int i = 0; i < b.length; i++)//循环处理,把每个字母画到画布上面去
{
paint.setColor(Color.WHITE);//设置字母的颜色为白色
paint.setTypeface(Typeface.DEFAULT_BOLD);//设置字母的面貌为默认的粗度  字有多粗
paint.setAntiAlias(true);//给Paint加上抗锯齿标志,是因为有些地方Paint是没法画的,就直接给canvas加抗锯齿,更方便

//其实这个抗锯齿很好解释,就是画布的边缘用paint画笔去画它,会出现一些波浪线吧,可以这么叫它,形状像锯齿一样,很

// 难看,所有如果加上抗锯齿的话,效果将有明显的改善  可以看下面的图来更好的说明
if (i == choose)
{//choose变量的值时默认的-1  它的作用就是用户手去触摸它  它起到一个flag旗帜的作用 这里先不讲
paint.setColor(Color.parseColor("#3399ff"));//点中了就改变颜色为蓝色
paint.setFakeBoldText(true);//点中了就稍微改变字母的大小,与其他的字母有着区别
}
float xPos = width / 2 - paint.measureText(b[i]) / 2;//当前的字母在画布上面的x坐标
float yPos = singleHeight * i + singleHeight;//当前的字母在画布上面的y坐标
canvas.drawText(b[i], xPos, yPos, paint);//在画布上面画上文字
paint.reset();//画笔重置
}
}


这段代码让我非常非常清楚的看清楚了字母列表是怎么创建的


那么接下来我们再回顾下这里面涉及到知识点:

1.画布上面的画笔对象Paint,有哪些函数呢?

Android Paint类介绍
/**  
     * Paint类介绍  
     *   
     * Paint即画笔,在绘图过程中起到了极其重要的作用,画笔主要保存了颜色,  
     * 样式等绘制信息,指定了如何绘制文本和图形,画笔对象有很多设置方法,  
     * 大体上可以分为两类,一类与图形绘制相关,一类与文本绘制相关。         
     *   
     * 1.图形绘制  
     * setARGB(int a,int r,int g,int b);  
     * 设置绘制的颜色,a代表透明度,r,g,b代表颜色值。  
     *   
     * setAlpha(int a);  
     * 设置绘制图形的透明度。  
     *   
     * setColor(int color);  
     * 设置绘制的颜色,使用颜色值来表示,该颜色值包括透明度和RGB颜色。  
     *   
     * setAntiAlias(boolean aa);  
     * 设置是否使用抗锯齿功能,会消耗较大资源,绘制图形速度会变慢。  
     *   
     * setDither(boolean dither);  
     * 设定是否使用图像抖动处理,会使绘制出来的图片颜色更加平滑和饱满,图像更加清晰  
     *   
     * setFilterBitmap(boolean filter);  
     * 如果该项设置为true,则图像在动画进行中会滤掉对Bitmap图像的优化操作,加快显示  
     * 速度,本设置项依赖于dither和xfermode的设置  
     *   
     * setMaskFilter(MaskFilter maskfilter);  
     * 设置MaskFilter,可以用不同的MaskFilter实现滤镜的效果,如滤化,立体等       *   
     * setColorFilter(ColorFilter colorfilter);  
     * 设置颜色过滤器,可以在绘制颜色时实现不用颜色的变换效果  
     *   
     * setPathEffect(PathEffect effect);  
     * 设置绘制路径的效果,如点画线等  
     *   
     * setShader(Shader shader);  
     * 设置图像效果,使用Shader可以绘制出各种渐变效果  
     *  
     * setShadowLayer(float radius ,float dx,float dy,int color);  
     * 在图形下面设置阴影层,产生阴影效果,radius为阴影的角度,dx和dy为阴影在x轴和y轴上的距离,

color为阴影的颜色  
     *   
     * setStyle(Paint.Style style);  
     * 设置画笔的样式,为FILL,FILL_OR_STROKE,或STROKE  
     *   
     * setStrokeCap(Paint.Cap cap);  
     * 当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的图形样式,如圆形样式  
     * Cap.ROUND,或方形样式Cap.SQUARE  
     *   
     * setSrokeJoin(Paint.Join join);  
     * 设置绘制时各图形的结合方式,如平滑效果等  
     *   
     * setStrokeWidth(float width);  
     * 当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的粗细度  
     *   
     * setXfermode(Xfermode xfermode);  
     * 设置图形重叠时的处理方式,如合并,取交集或并集,经常用来制作橡皮的擦除效果  
     *   
     * 2.文本绘制  
     * setFakeBoldText(boolean fakeBoldText);  
     * 模拟实现粗体文字,设置在小字体上效果会非常差  
     *   
     * setSubpixelText(boolean subpixelText);  
     * 设置该项为true,将有助于文本在LCD屏幕上的显示效果  
     *   
     * setTextAlign(Paint.Align align);  
     * 设置绘制文字的对齐方向  
     *   
     * setTextScaleX(float scaleX);  
     * 设置绘制文字x轴的缩放比例,可以实现文字的拉伸的效果  
     *   
     * setTextSize(float textSize);  
     * 设置绘制文字的字号大小  
     *   
     * setTextSkewX(float skewX);  
     * 设置斜体文字,skewX为倾斜弧度  
     *   
     * setTypeface(Typeface typeface);  
     * 设置Typeface对象,即字体风格,包括粗体,斜体以及衬线体,非衬线体等  
     *   
     * setUnderlineText(boolean underlineText);  
     * 设置带有下划线的文字效果  
     *   
     * setStrikeThruText(boolean strikeThruText);  
     * 设置带有删除线的效果  
     *   
     */  


2.一些具体的文本绘制函数作用是什么:

1)void android.graphics.Paint.setFakeBoldText(boolean fakeBoldText)

Parameters
fakeBoldText  true to set the fakeBoldText bit in the paint's flags, false to clear it.

true设定,false清除

2)抗锯齿函数的作用效果是怎么样的:paint.setAntiAlias(true);


3).调用Paint的measureText()方法取得字符串显示的宽度值

Android下可以利用 sdk 中已经提供的Paint的 measureText(String text) 方法


至此  字母列表这种现实效果就已经基本实现了,


接下来重要的工作就是可以点击  触发响应事件了  这个也是需要自己去写的  请继续关注下篇文章


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值