在了解自定义控件之前一定要学习Canvas。
1.Path类
public void moveTo(float x, float y)移动绘制的起点,从点(x,y)点开始进行绘制。
public void lineTo(float x, float y)
连接起始点与点(x,y)的直线,如果没有使用moveTo则起始点默认为(0,0)。
2.canvas类
rectangle n. 矩形
drawRect(RectF rect, Paint paint) //绘制区域,参数一为RectF一个区域
drawPath(Path path, Paint paint) //绘制一个路径,参数一为Path路径对象
drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint) //贴图,参数一就是我们常规的Bitmap对象,参数二是源区域(这里是bitmap),参数三是目标区域(应该在canvas的位置和大小),参数四是Paint画刷对象,因为用到了缩放和拉伸的可能,当原始Rect不等于目标Rect时性能将会有大幅损失。
drawLine(float startX, float startY, float stopX, float stopY, Paintpaint) //画线,参数一起始点的x轴位置,参数二起始点的y轴位置,参数三终点的x轴水平位置,参数四y轴垂直位置,最后一个参数为Paint 画刷对象。
drawPoint(float x, float y, Paint paint) //画点,参数一水平x轴,参数二垂直y轴,第三个参数为Paint对象。
drawText(String text, float x, floaty, Paint paint) //渲染文本,Canvas类除了上面的还可以描绘文字,参数一是String类型的文本,参数二x轴,参数三y轴,参数四是Paint对象。
drawOval(RectF oval, Paint paint)//画椭圆,参数一是扫描区域,参数二为paint对象;
drawCircle(float cx, float cy, float radius,Paint paint)// 绘制圆,参数一是中心点的x轴,参数二是中心点的y轴,参数三是半径,参数四是paint对象;
drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)//画弧,
参数一是RectF对象,一个矩形区域椭圆形的界限用于定义在形状、大小、电弧,参数二是起始角(度)在电弧的开始,
参数三扫描角(度)开始顺时针测量的,参数四是如果这是真的话,包括椭圆中心的电弧,并关闭它,如果它是假这将是一个弧线,参数五是Paint对象;
3.Paint类
public void set(Paint src) 根据已有画笔的属性进行赋值
public void setColor(int color) 设置颜色
public void setAlpha(int alpha) 设置透明度,alpha为透明度,取值范围为0~255,数值越小越透明
public void setARGB(int a, int r, int g, int b) 设置透明度和颜色,a代表透明度,r,g,b代表颜色值
public void setAntiAlias(boolean aa) 设置是否使用抗锯齿功能,比较耗资源,减慢绘制速度
public void setDither(boolean dither) 设定是否使用图像抖动,如true,绘制出来的图片颜色更饱满、清晰
public void setStyle(android.graphics._Original_Paint.Style style) 设置画笔的样式,为FILL,FILL_OR_STROKE,或STROKE
以下这段文字来源于网络,谢谢作者!
当我们在调用drawCircle、drawOval、drawArc、drawRect等方法时,我们既可以绘制对应图形的填充面,也可以只绘制该图形的轮廓线,控制的关键在于画笔Paint中的style。Paint通过setStyle方法设置要绘制的类型,style有取三种值:Paint.Style.FILL、Paint.Style.STROKE和Paint.Style.FILL_AND_STROKE。
当style为FILL时,绘制是填充面,FILL是Paint默认的style;
当style为STROKE时,绘制的是图形的轮廓线;
当style为FILL_AND_STROKE时,同时绘制填充面和轮廓线,不过这种情况用的不多,因为填充面和轮廓线是用同一种颜色绘制的,区分不出轮廓线的效果。
参考:
http://blog.csdn.net/rhljiayou/article/details/7212620/
http://www.cnblogs.com/hwgt/p/5416866.html
如何获取屏幕宽、高
网上有很多方法,但是有一个过时啦,所以特别指出。
//1
int w=getWindowManager().getDefaultDisplay().getWidth();
//2
DisplayMetrics dm=new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int w1=dm.widthPixels;
//3
WindowManager wm = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
int w2 = wm.getDefaultDisplay().getWidth();
Log.i("wide",w+"");
Log.i("wide1",w1+"");
Log.i("wide2",w2+"");