android地图路径绘制,android:利用svg的path路径+canvas 开发自定义地图控件

本文介绍了如何在Android中实现一个自定义地图控件,通过解析SVG文件并利用Canvas画笔绘制地图路径,实现地图元素的点击、缩放等交互功能。开发者需要SVG格式的地图线条数据,并在自定义MapView类中处理触摸事件和缩放操作。
摘要由CSDN通过智能技术生成

需求:做小型地图的一个显示功能

实现思路:自定义view解析对应的svg文件,在利用canvas的画笔画出相应的地图线条。各个线条围成的区域可以表示成各个元素比如树,街道,路灯,汽车等等一切事物。然后通过view的点击事件可以给自定义控件添加点击,长按,放大缩小等等操作。

需要美工给一个svg格式的图片。

//当然这里并不止一个path路径,这里的path路径就是地图的线条

android:width="3000dp"

android:height="3000dp"

android:viewportWidth="3000"

android:viewportHeight="3000">

android:dataName="CCCC"

android:cabinId="9a43312887844fa3a2815dfac018f6ee"

android:pathData="M7,2297H157v60H7v-60Z"

android:strokeWidth="8.333"

android:fillType="evenOdd"

android:strokeColor="#000"/>

path标签内可存放一切你想要存放的信息,可以是表示一棵树,一栋房子都随意,只需要按照相应的格式解析出来存放到对象内就行了。

//控件自适应请重写onMeasure方法,我这里是直接全屏了。

public class MapView extends View {

private Paint paint;

private Context mContext;

private int[] colors = new int[]{Color.BLUE,Color.CYAN,Color.YELLOW,Color.GREEN};

private List pathItemList = new ArrayList<>();

GestureDetector gestureDetector;

ScaleGestureDetector scaleGestureDetector;

//双指操作下的中心位置

float focusX = 0,focusY = 0;

float posX = 0, posY = 0;

int viewWidth, viewHeight;

//是否初始化了

boolean hasInitViewSize;

float widthScale, heightScale;

float scaleFactor = 1.0f;

private int imgWidth = 3000,imgHeight=3000;

private MapPathItem selectPathItem;

//地图最大的矩阵

private RectF mapRectF;

private List users;

private List usersLocationInfo;

private Bitmap userLocationIcon;

private itemClickListener itemClickListener;

public MapView(Context context) {

super(context);

}

public MapView(Context context, @Nullable AttributeSet attrs) {

super(context, attrs);

init(context);

}

private void init(Context context) {

this.mContext = context;

this.paint = new Paint();

users = new ArrayList<>();

usersLocationInfo = new ArrayList<>();

userLocationIcon = BitmapFactory.decodeResource(getResources(),R.drawable.avtar_icon);

gestureDetector = new GestureDetector(context, new MySimpleOnGestureDetector());

scaleGestureDetector = new ScaleGestureD

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值