Android开发-----03-使用Canvas绘制虚线……

本文详细介绍了在Android项目中如何利用Canvas类实现虚线绘制,并通过Bitmap资源创建重复的虚线图案。同时展示了虚线在不同场景下的应用效果,包括直接绘制虚线、使用DrawRect实现特殊虚线效果以及使用Bitmap资源创建虚线图案。此外,还讨论了虚线在项目中的实际应用场景,如自定义控件的分割线设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本章只关注绘制虚线,不关注Canvas的其它操作。

Android中,Canvas的功能都非常强大,一般情况下,用到了就去研究,用不到就懒得理会它。但是随着项目的需求不断增加,再怎么不想了解Canvas,也会或多或少的和这玩意儿接触。

例如在Android中,如果自定义的控件需要使用虚线该怎么完成呢。

1、  可以使用美工,让美工进行切图

2、  可以自己使用画笔进行绘制

现在提供这两种方式的操作:

package com.example.aaaaa;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.DashPathEffect;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.View;

public class MyView extends View {
	/** 中央分割线的绘制  **/
    private Paint linePaint;
    private Paint strockpaint;
    private Paint p;
	private Bitmap decodeResource;
	public MyView(Context context, AttributeSet attrs) {
		super(context, attrs);
		linePaint = new Paint();
		linePaint.setAntiAlias(true);
//		linePaint.setColor(Color.parseColor("#aeaeae"));
		linePaint.setColor(Color.RED);
		linePaint.setStrokeWidth(2f);
		linePaint.setTextSize(25);
		linePaint.setStrokeJoin(Paint.Join.ROUND);
		
		
		strockpaint = new Paint();
		strockpaint.setAntiAlias(true);
		strockpaint.setStyle(Paint.Style.STROKE);  
		strockpaint.setColor(Color.BLUE);
		DashPathEffect effects = new DashPathEffect(new float[]{5,5,5,5},1);  
		strockpaint.setPathEffect(effects);
		
		p = new Paint(Paint.ANTI_ALIAS_FLAG);
		p.setStyle(Style.STROKE);
		p.setColor(Color.RED);
		p.setStrokeWidth(1);
		p.setTextSize(30);
		p.setStrokeWidth(10);
		
		DashPathEffect effects1 = new DashPathEffect(new float[] { 1, 4, 7, 8}, 1);
		p.setPathEffect(effects1);
		decodeResource = BitmapFactory.decodeResource(getResources(),R.drawable.seat_center_line);
	}
	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		canvas.drawLine(100, 0, 600, 1000, linePaint);
		
		canvas.drawCircle(202, 202, 100, strockpaint);
		canvas.drawLine(0, 0, 400, 400, strockpaint);
		canvas.drawRect(20, 100, 21, 450, strockpaint);
		
		
		canvas.drawText("绘制红色的虚线", 210, 300, linePaint);
		canvas.drawLine(200, 140, 500, 40, p);
		//绘制红色的虚线
		Path path = new Path();
		path.moveTo(200, 300);
		path.lineTo(300, 1600);
		<span style="color:#009900;">//关注:①使用Canvas绘制虚线</span>
		canvas.drawPath(path , p);
		<span style="color:#009900;">//关注:②使用Canvas绘制虚线Bitmap--图片是虚线的</span>
		canvas.drawBitmap(createRepeaterY(1000, decodeResource), 300, 300, null);
	}
	//绘制重复bitmap的图片
	public Bitmap createRepeaterY(int height, Bitmap src){
		int count = (height + src.getHeight() - 1) / src.getHeight();
		Bitmap bitmap = Bitmap.createBitmap(src.getWidth(), height, Config.ARGB_8888);
		Canvas canvas = new Canvas(bitmap);
		for(int idx = 0; idx < count; ++ idx){
			canvas.drawBitmap(src, 0, idx * src.getHeight(), null);
		}
		
		return bitmap;
	}

}

效果图如下:


当然也可是使用drawRect达到虚线的效果,但是如果一个控件要求有缩放的功能,那么drawRect绘制的虚线会在所放的时候连接到一块,变成了波浪线。

项目中用到的图片:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值