如何在android中使用Path绘制一个多边形
今天就跟大家聊聊有关如何在android中使用Path绘制一个多边形,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
成都创新互联公司专注于网站建设,为客户提供网站设计、网站制作、网页设计开发服务,多年建网站服务经验,各类网站都可以开发,品牌网站制作,公司官网,公司展示网站,网站设计,建网站费用,建网站多少钱,价格优惠,收费合理。
package smart.com.pathview; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; import android.view.View; /** * 绘制多边形 */ public class PathmMultiView extends View { private Paint paint; public PathmMultiView(Context context) { this(context,null); } public PathmMultiView(Context context, AttributeSet attrs) { this(context, attrs,0); } public PathmMultiView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initPaint(); } private void initPaint() { paint = new Paint(); paint.setAntiAlias(true); paint.setStrokeWidth(5); paint.setTextSize(24); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); paint.setColor(Color.GREEN); canvas.drawText("杭州是个美丽的城市",20,20,paint); paint.setColor(Color.RED); canvas.drawPoint(100,100,paint); canvas.translate(100,100); paint.setColor(Color.BLUE); canvas.drawText("杭州是个美丽的城市",0,0,paint); } }
效果:
上面的红点是坐标点(100,100)的位置,为什么绘制的蓝色的文字是在坐标点(100,100)的位置呢?是因为你canvas使用了translate(100,100)也就是x,y坐标都平移了100px,这个是根据你当前的view的左上角坐标为原点进行平移的,平移肯定是相对那个点进行平移的,不人为的去设置画布的颜色,默认都是透明的,否则你draw...2次,上次绘制的内容就被覆盖了,文字太苍白无力,就好像你对一个女孩说一千篇我爱你,还不如说你在杭州买了套房来的实际,就好像香港有一个电影中的台词是这么说的,这是一个最好的时代,也是一个最坏的时代,好了废话不多说,图,我要图!
关于如何恢复画布有三种情况 就以平移例子来讲
第一种:
你x,y平移了多少后,我们知道x>0是向右平移,x<0是向左平移,那么恢复就很简单了
canvas.translate(-x,-y)
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); paint.setColor(Color.GREEN); canvas.drawText("杭州是个美丽的城市",20,20,paint); paint.setColor(Color.RED); canvas.drawPoint(100,100,paint); canvas.translate(100,100); paint.setColor(Color.BLUE); canvas.translate(-100,-100); canvas.drawText("杭州是个美丽的城市",20,20,paint); }
效果:
你会发现绿色和蓝色是重叠了。
第二种:
配套使用canvas.save() canvas.restore() ;save()是绑定画布,restore()是让画布恢复到最初的状态
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); paint.setColor(Color.GREEN); canvas.save(); canvas.drawText("杭州是个美丽的城市",20,20,paint); paint.setColor(Color.RED); canvas.drawPoint(100,100,paint); canvas.translate(100,100); paint.setColor(Color.BLUE); canvas.restore(); canvas.drawText("杭州是个美丽的城市",20,20,paint); }
效果:
第三种:
int count = canvas.save(Canvas.MATRIX_SAVE_FLAG);//这个看你是在canvas.draw...哪里调用了,就相当于保存画布 canvas.restoreToCount(count);//恢复
画图:
现在讲下画多边形,先确定下思路:
1:把这个多边形的外切圆画出来当做一个辅助的参考目标,
2:计算多个点的坐标然后连接成一条线
如图分析:
现在根据这个思路把代码实现下:
代码如下:
package smart.com.pathview; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.util.AttributeSet; import android.view.View; /** * 绘制多边形 */ public class PathmMultiView extends View { private Paint paint; private Path path; private int width,height; public PathmMultiView(Context context) { this(context,null); } public PathmMultiView(Context context, AttributeSet attrs) { this(context, attrs,0); } public PathmMultiView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initPaint(); } private void initPaint() { width = 400; height = 400; path = new Path(); paint = new Paint(); paint.setAntiAlias(true); paint.setStrokeWidth(5); paint.setColor(Color.BLUE); paint.setStyle(Paint.Style.STROKE); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { setMeasuredDimension(width,height); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); drawMultShape(canvas,6,width/2); } /** * @param canvas 画布 * @param count 绘制几边形 * @param radius //外圆的半径 */ public void drawMultShape(Canvas canvas,int count,float radius){ canvas.translate(radius,radius);// if(count<5){ return; } for (int i=0;i效果:
哪绘制正8变形呢?好说,直接
drawMultShape(canvas,6,width/2); 第二个参数就是几边形的改为8就ok了,试试看看效果:就一句话,哦了。
还有一个问题就是如果所绘制的是多边形,但是好像形状不一样,怎么修改,这个时候只要旋转画布就行了,比如这张图片:
使用canvas.rotate(30);旋转30度后是这样的
当然你要在绘制这个图形之前对画布进行旋转,不然不起作用,网上有些五角星的效果,是怎么实现的呢?比如这样的效果:
这是正6变形所形成的星星形状,分析如图:
看完上述内容,你们对如何在android中使用Path绘制一个多边形有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。
标题名称:如何在android中使用Path绘制一个多边形
标题链接:http://azwzsj.com/article/gjgddg.html