关闭

Android中画虚线以及用path画线时设置颜色等效果的改变

标签: androidpath
4191人阅读 评论(0) 收藏 举报
分类:
1、Android中画虚线,可以通过DashPathEffect方法实现,它如何使用网上好多,具体实例看下面的代码。

2、Android画线的时候,如果用到path进行画线,如果想实现画不同颜色或其他效果时,要注意使用不同的Path对象,不然后面的设置会覆盖前面的,也就是说,调用canvas.drawPath(path, paint)时,会在同一个path对象的所有路径上进行paint改变后的绘制,也就相当于把前面的覆盖了。

比如在SurfaceView上画一个如图所示的效果,部分代码如下:

Canvas canvas = null;
Paint paint = null;
try {
	synchronized(mSurHolder){	//做一下同步处理
		canvas = mSurHolder.lockCanvas(null);	//锁定画布
		paint = new Paint();
		
		//画蓝色矩形区域
		paint.setARGB(255, 0, 200, 255);
		paint.setStyle(Paint.Style.FILL);
		canvas.drawRect(rect, paint);
		
		paint.setStyle(Paint.Style.STROKE);	//空心
		paint.setColor(Color.WHITE);
        paint.setStrokeWidth(1);
        
	    //设置画虚线,如果之后不再使用虚线,调用paint.setPathEffect(null);
	    PathEffect effects = new DashPathEffect(new float[]{5,5,5,5},1);  
        paint.setPathEffect(effects);  
        //横向第一条虚线
        Path path1 = new Path();
        path1.moveTo(left, (float) (top+tableHeight*1.0/3));
        path1.lineTo(right, (float) (top+tableHeight*1.0/3));
        	
        //横向第二条虚线
        path1.moveTo(left, (float) (bottom-tableHeight*1.0/3));
        path1.lineTo(right, (float) (bottom-tableHeight*1.0/3));
        	
        //纵向第一条虚线
        path1.moveTo((float) (left+tableWidth*0.4), top);
        path1.lineTo((float) (left+tableWidth*0.4), bottom);
		
		//纵向第二条虚线
		path1.moveTo((float) (right-tableWidth*0.4), top);
		path1.lineTo((float) (right-tableWidth*0.4), bottom);
		canvas.drawPath(path1, paint);	//同一个path对象,只需要一个drawPath()
		
		paint.setStrokeWidth(2);
		paint.setPathEffect(null);	//设置使之前的虚线效果无效
		//画垂直中线
        Path path2 = new Path();	//想要不同的颜色时要new一个新的path对象
		path2.moveTo(surWidth/2, top);
		path2.lineTo(surWidth/2, bottom);
        canvas.drawPath(path2, paint);
		//画水平中线
		Path path3 = new Path();
		paint.setColor(Color.BLACK);
		path3.moveTo(left, surHeight/2);
		path3.lineTo(right, surHeight/2);
        canvas.drawPath(path3, paint);
	}
} catch (Exception e) {
	// TODO 自动生成的 catch 块
	e.printStackTrace();
}finally{
	if (canvas != null) {
		mSurHolder.unlockCanvasAndPost(canvas);	//解锁画布并画图
	}
}




0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:7809次
    • 积分:119
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:2篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档