【Android原创】自定义SurfaceViews实现地图移动
来源:互联网 发布:做微商可以淘宝进货吗 编辑:程序博客网 时间:2024/05/18 00:18
屏幕显示地图指定的位置,并且流程滚动。
黑色框代表屏幕大小
红色框代表地图大小
。。。想想原理是这样的,但是通过代码怎么实现呢?
忽然想起createBitmap可以截取某一片区域
于是乎准备自定义SurfaceView
因为SurfaceView是独立线程,所以优先考虑
package com.ask.jilun.view;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Paint;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.view.WindowManager;import com.ask.jilun.R;/** */public class MapsView extends SurfaceView implements SurfaceHolder.Callback , Runnable { private SurfaceHolder surfaceHolder; private Context context; private int windowWidth;//屏幕宽高 private int windowHeight; private boolean isRunning; private Paint paint; private Bitmap mapBitmap;//地图 private int mapBitmapWidth;//地图的宽高 private int mapBitmapHeight; private Bitmap nowBitmap;//现在显示的部分 private Thread thread; private int startX,startY;//开始剪裁的位置 public MapsView(Context context,int startX ,int startY) { super(context); this.context = context; surfaceHolder = getHolder(); surfaceHolder.addCallback(this); WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); windowWidth = wm.getDefaultDisplay().getWidth(); windowHeight = wm.getDefaultDisplay().getHeight(); this.startX = startX; this.startY = startY; paint = new Paint(); mapBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.mapfengyuegu); mapBitmapWidth = mapBitmap.getWidth(); mapBitmapHeight = mapBitmap.getHeight(); isRunning = true; } @Override public void surfaceCreated(SurfaceHolder holder) { thread = new Thread(this); thread.start(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { isRunning = false; thread.destroy();//销毁线程 } @Override public void run() { Canvas canvas = null; while (isRunning){ synchronized (surfaceHolder) { canvas = surfaceHolder.lockCanvas(null); doDraw(canvas,startX,startY); try { Thread.sleep(10);//刷新频率 } catch (InterruptedException e) { e.printStackTrace(); }finally { surfaceHolder.unlockCanvasAndPost(canvas); } } startX += 10; startY += 10; } } /** * 根据移动的距离在地图中剪裁对应的位置 * @param canvas * @param startX 开始的X * @param startY 开的的Y * * 注意:开始剪裁的X+WindowX Y+WindowY 不能大于mapBitmap */ private void doDraw(Canvas canvas ,int startX , int startY) { if(startX+windowWidth <= mapBitmapWidth && startY+windowHeight <= mapBitmapHeight){ nowBitmap = Bitmap.createBitmap(mapBitmap,startX,startY,windowWidth,windowHeight); canvas.drawBitmap(nowBitmap,this.startX,this.startY,paint); }else{ isRunning = false; } }}
这是地图的原图,是不是比屏幕要大的多了0 0
- 【Android原创】自定义SurfaceViews实现地图移动
- Android实现人物在地图中移动
- 【移动GIS】自定义在线地图
- android 自定义view实现图形移动
- Android 自定义 地图 室内
- android实现百度地图自定义弹出窗口功能
- android实现百度地图自定义弹出窗口功能
- 高德地图Android自定义路线规划的简单实现
- Android 地图 Marker移动问题
- Android自定义收银键盘(原创)
- Android基于高德地图自定义Maker实现地图省市区多层级数据展示
- Android 自定义控件的 拖拽、移动 实现 方法
- Android实现可移动的自定义浮动按钮
- 移动开发----Android模仿打字机效果的自定义View实现
- Android自定义地图示例:QQ地图
- Android高德地图自定义地图指南针
- Android移动开发-在Android项目里调用基于百度地图API实现定位
- Android移动开发-在Android项目里调用基于高德地图API实现定位
- kafka数据可靠性深度解读
- Cafffe入门-win7上训练自己的数据和微调
- [php] Thinkphp删除图片和数据库记录
- 昆石VOS3000_2.1.2.0完整安装包及安装脚本
- ios --个推
- 【Android原创】自定义SurfaceViews实现地图移动
- qt学习笔记(八)之深入QSqlQuery
- HDU1695:GCD(莫比乌斯函数)
- Unity 脚本执行顺序
- python 字典访问的三种方法
- 第三届蓝桥杯 第四题 低碳生活大赛
- MarkDowm 好玩之处
- dom实例
- Camtasia Studio 8.6.0 中文汉化版安装教程(图)附下载