暑假第二十一天,今天天气有点小热,长时间对着电脑眼睛还真有点不适应,下午刚刚出地下室吃饭的时候,两眼眺望了一下远方,就感觉小有压力,眼睛和头都有点不舒服,哎!程序员真苦逼啊!!!伤不起的还是我们这群程序员。。。嘿嘿,废话不多说了看看今天都学的什么,今天主要学习的是实现高德地图的图层覆盖方法和相机照相的功能的实现过程

1.首先看一下布局mapview.xml

xmlns:autonavi="http://schemas.android.com/apk/res/com.AMap"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

android:id="@+id/imagebutton"

android:layout_width="45dp"

android:layout_height="45dp"

android:src="@drawable/camera"/>

android:id="@+id/mapView"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:clickable="true" />

2.camera.xml

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

android:id="@+id/suruface"

android:layout_width="fill_parent"

android:layout_height="390dp" />

android:id="@+id/iamge"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center_horizontal"

android:src="@drawable/a" />

3.看看主活动的内容GaodeMapTestActivity.java

package com.wang;

import com.amap.mapapi.core.GeoPoint;

import com.amap.mapapi.map.MapActivity;

import com.amap.mapapi.map.MapController;

import com.amap.mapapi.map.MapView;

import com.amap.mapapi.map.Overlay;

import android.content.Intent;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.graphics.Point;

import android.graphics.Paint.Style;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.ImageView;

public class GaodeMapTestActivity extends MapActivity {

private MapView mapView;

private MapController mapController;

private GeoPoint point;

private ImageView image;

/**

*显示栅格地图,启用内置缩放控件,并用MapController 控制地图的中心点及Zoom 级别

*/

protected void onCreate(Bundle savedInstanceState) {

// 设置地图为矢量模式

this.setMapMode(MAP_MODE_VECTOR);

super.onCreate(savedInstanceState);

setContentView(R.layout.mapview);

mapView = (MapView) findViewById(R.id.mapView);

// 设置启用内置的缩放组件

mapView.setBuiltInZoomControls(true);

// 得到mapview的控制权,可以用它控制盒驱动平移和缩放

mapController = mapView.getController();

// 用给定的经纬度构造一个GeoPoint,单位是微度(度* 1E6) 得到南阳理工学院的经纬度

// * 1E6 非常重要,这样可以把地图的下面显示出来,不然就光有自己画的图层了

point = new GeoPoint((int) (32.973657928606265 * 1E6),

(int) (112.54251837730408 * 1E6));

// 设置地图的中心

mapController.setCenter(point);

// 设置地图的缩放级别

mapController.setZoom(12);

// 自定义Overlay可以实现点,线,面的叠加。

mapView.getOverlays().add(new Overlay() {

/****

* 画布类持有“画"的功能。绘制一些东西,你需要四个基本组件: 一个位图来保持像素,画布主机平局调用(写为位图),

* 绘图原语(例如。,路径,Rect文本,位图), 和一个油漆(描述的颜色和风格的画)。

****/

public void draw(Canvas canvas, MapView mapView, boolean shadow) {

super.draw(canvas, mapView, shadow);

// 创建一个screenpPoint对象

Point screenpPoint = new Point();

// 得到屏幕上的像素

mapView.getProjection().toPixels(point, screenpPoint);

// 位图对象创建从各种来源,包括文件、流、和byte-arrays。解码位图,得到图片资源

Bitmap bmp = BitmapFactory.decodeResource(getResources(),

R.drawable.da_marker_red);

// 画指定的位图,同其主要/左角(x,y),使用指定的油漆,改变当前的矩阵。

canvas.drawBitmap(bmp, screenpPoint.x, screenpPoint.y - 50,

null);

// 画文字

Paint painttext = new Paint();

painttext.setTextSize(18);

painttext.setColor(Color.RED);

canvas.drawText("南阳理工学院", screenpPoint.x, screenpPoint.y,

painttext);

// 画圆

Paint mcirclePaint = new Paint();

// s设置普通显示效果

mcirclePaint.setAntiAlias(true);

mcirclePaint.setColor(Color.BLUE);

// 设置透明度的

mcirclePaint.setAlpha(50);

mcirclePaint.setStyle(Style.FILL);

canvas.drawCircle(screenpPoint.x + 150, screenpPoint.y, 50,

mcirclePaint);

// 画直线

Paint painline = new Paint();

painline.setColor(Color.RED);

// 边界宽度

painline.setStrokeWidth(3.0f);

// 轻画

painline.setStyle(Paint.Style.STROKE);

canvas.drawLine(screenpPoint.x - 100, screenpPoint.y,

screenpPoint.x, screenpPoint.y - 100, painline);

}

@Override

public boolean onTap(GeoPoint arg0, MapView arg1) {

// TODO Auto-generated method stub

return super.onTap(arg0, arg1);

}

});

image = (ImageView) findViewById(R.id.imagebutton);

image.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

Intent intent = new Intent(GaodeMapTestActivity.this,

TakePhotos.class);

startActivity(intent);

}

});

}

}

4.看看相机实现的活动TakePhotos.java

package com.wang;

import java.io.FileOutputStream;

import java.io.IOException;

import android.app.Activity;

import android.hardware.Camera;

import android.os.Bundle;

import android.util.Log;

import android.view.SurfaceHolder;

import android.view.SurfaceView;

import android.view.View;

import android.view.Window;

import android.view.WindowManager;

import android.view.View.OnClickListener;

import android.widget.ImageButton;

public class TakePhotos extends Activity {

private static final String TAG = "TakePhotos";

final int latchedOrientation = 90;

/***

* 相机类是用于设置捕获图像设置,启动/停止预览,抓拍照片,和检索帧编码的视频。 这个类是一个客户端相机的服务,管理实际的相机硬件。 *

**/

private Camera mCamera;

// 处理打开相机关闭相机,及图片尺寸的大小

private SurfaceHolder.Callback mSurfaceListener = new SurfaceHolder.Callback() {

// 打开相机

public void surfaceCreated(SurfaceHolder holder) {

mCamera = Camera.open();

Log.i(TAG, "Camera opened");

try {

// 照相预览

mCamera.setPreviewDisplay(holder);

} catch (Exception e) {

e.printStackTrace();

}

}

// 停止预览

public void surfaceDestroyed(SurfaceHolder holder) {

// 释放相机资源

mCamera.release();

mCamera = null;

Log.i(TAG, "Camera released");

}

// 获取相片改变的尺寸和格式

public void surfaceChanged(SurfaceHolder holder, int format, int width,

int height) {

// 得到相机的参数

Camera.Parameters parameters = mCamera.getParameters();

// parameters.setPreviewSize(width, height);

// parameters.setPictureFormat(PixelFormat.JPEG);

// jpeg quality菜单项设置

parameters.set("jpeg-quality", 85);

// parameters.setRotation(latchedOrientation);

mCamera.setParameters(parameters);

// 开始预览

mCamera.startPreview();

Log.i(TAG, "Camera preview started");

Log.i(TAG, "width : " + width + " , height : " + height);

}

};

// 设备不支持自动对焦将收到一个“假的”回调到这个接口 ,实现自动对焦的功能

private Camera.AutoFocusCallback mAutoFocusListener = new Camera.AutoFocusCallback() {

/**

* 判断相机的自动对焦时调用完成。如果相机不支持自动对焦和自动对焦叫做, onAutoFocus会被立即调用成功的用假值设置为true。

* 常规的自动对焦没有锁auto-exposure和auto-white完成 *

*****/

public void onAutoFocus(boolean success, final Camera camera) {

Log.i(TAG, "AutoFocus : " + success);

camera.autoFocus(null);

/**

* 触发异步捕获图像。相机服务将启动一系列的回调应用程序作为图像捕获的进展 。快门回调后出现在照片拍摄。

* 这可以用来触发一个声音,让用户知道形象已经被捕获。就是听到的卡卡的声音

* */

camera.takePicture(mShutterListener, null, mPictureListener);

new Thread() {

@Override

public void run() {

try {

// 睡眠3s

Thread.sleep(3000);

} catch (InterruptedException e) {

e.printStackTrace();

}

camera.startPreview();

}

}.start();

}

};

// 图像捕捉的回调方法

private Camera.ShutterCallback mShutterListener = new Camera.ShutterCallback() {

public void onShutter() {

Log.i(TAG, "onShutter");

}

};

// 照片回调 声明一个PictureCallback对象

private Camera.PictureCallback mPictureListener = new Camera.PictureCallback() {

// 获取图像数据可用时,调用一个图片是采取之后。数据的格式取决于上下文和相机的回调。

public void onPictureTaken(byte[] data, Camera camera) {

Log.i(TAG, "Picture taken");

// 数据写到输出流,到一个文件。如果输出文件存在,

// 也可以替换或附加到。如果它不存在,将会创建一个新文件

FileOutputStream fos = null;

try {

// 写入到SD卡中

fos = new FileOutputStream("/sdcard/TakePhotos.jpg");

fos.write(data);

} catch (IOException e) {

e.printStackTrace();

} finally {

if (fos != null) {

try {

fos.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

};

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

final Window win = getWindow();

// 设置全屏

win.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

// 没有标题

requestWindowFeature(Window.FEATURE_NO_TITLE);

requestWindowFeature(Window.FEATURE_PROGRESS);

setContentView(R.layout.camera);

/****

* SurfaceView 提供专用的绘图表面上嵌入视图层次。 负责放置在正确的位置的表面在屏幕上   ,以便在窗口后面是握着它的

* 允许其表面显示的 访问底层表面是通过SurfaceHolder接口,可以通过调用getHolder检索()。

* **/

// 实例化组件

SurfaceView surface = (SurfaceView) findViewById(R.id.suruface);

// 访问底层表面是通过SurfaceHolder接口

SurfaceHolder holder = surface.getHolder();

// 添加一个回调接口

holder.addCallback(mSurfaceListener);

// 在需要的时候自动设置。

holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

// 实例化组件

ImageButton button = (ImageButton) findViewById(R.id.iamge);

// 为图片设置监听事件,按下图片后可以进行拍照

button.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

if (mCamera != null) {

mCamera.autoFocus(mAutoFocusListener);

}

}

});

}

}

5.亲!最重要的别忘了添加权限哦!

package="com.wang"

android:versionCode="1"

android:versionName="1.0" >

android:icon="@drawable/ic_launcher"

android:label="@string/app_name" >

android:name=".GaodeMapTestActivity"

android:label="@string/app_name" >

6.由于高德地图需要导入第三方jar包MapApi.jar(解决这个问题,可以看我以前的关于第三方jar包的导入方法)和一个动态链接库libminimapv320.so,解决这个问题可以直接复制

7,运行的结果如图,由于模拟器没有后置摄像头,所以第二章图片有一部分是白的

至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

如有侵权,请联系小编,小编对此深感抱歉,届时小编会删除文章,立即停止侵权行为,请您多多包涵。

既然都看到这里,领两个红包在走吧!

以下两个红包每天都可以领取

1.支付宝搜索 522398497,或扫码支付宝红包海报。

支付宝扫一扫,每天领取大红包

2.微信红包,微信扫一扫即可领取红包

微信扫一扫,每天领取微信红包

小礼物走一走,来简书关注我

高德地图各种摄像头图标_高德地图Overlay的应用以及照相功能的实现相关推荐

  1. 高德地图各种摄像头图标_高德导航中,限速摄像头,违章摄像头,监控摄像头各有什么区别...

    展开全部 限速摄像头e69da5e6ba903231313335323631343130323136353331333365666163是测速用的,超过限制时速就会抓拍,一般都是两个点中间的距离固定, ...

  2. 高德地图各种摄像头图标_【高德地图上的摄像头资讯】高德地图上的摄像头足球知识与常识 - 足球百科 - 599比分...

    摄像头是测速用的,超过限制时速就会抓拍,一般都个点中间的距离固定,分别进入分析系统记录出时速限制,就会记录违章了. 违章摄像头一般都是在红绿灯,通过地感线圈传导违章信号,触发抓拍. 监控摄像头分为测车 ...

  3. android 高德地图移动卡顿_高德地图4.8和百度地图3.1的抉择,如何发送地址到车机(下载失效本帖奉上百度云盘)...

    9月已经过去半个月了,升级一直围绕着领克车友,8月的兴奋,总想知道车机有什么改变,很多车友提前去预约,总想尝第一口鲜,这个第一口可不好喝,头啖汤随好,但会烫口,于是我带着观望的态度,因为我始终觉得,安 ...

  4. android 高德地图移动卡顿_高德、百度和腾讯三家比拼,哪个 Android 车机地图 App 更好用?...

    写在前面 不管是自己开车.还是平时打车,相信你一定留意过驾驶座旁边位于车辆中间的那块大屏幕,不管是平时开车导航.放音乐,还是通过倒车影像辅助倒车,都离不开这块屏幕,这就是中控车机. 中控车机往往搭载的 ...

  5. 高德地图 点位置 偏移_高德上线“家人地图”功能,群组内可实时共享位置

    近日,高德正式上线了"家人地图"功能,满足用户的更多需求.据了解,新功能可以让参与组队的家人随时看到彼此的位置:家人加入后,可随时确认其位置安全:当家人离开或到达此地时用户将收到通 ...

  6. 高德地图去掉定位按钮_高德地图自定义定位按钮及点击事件

    最近使用了一下高德地图,使用期间将出现的问题记录一下.文中出现不对的地方,悉听各路大神指正.2018年11月23日15:59:46 1.首先我们初始化map控制对象aMap .if (aMap ==n ...

  7. android 高德地图设置不能旋转_高德地图行车记录仪AR导航怎么设置使用教程

    高德地图AR导航功能再次升级,现在,大家可以通过车内的行车记录仪来当眼睛,实现高清AR实景导航.将高德地图与行车记录仪连接后,系统将会自动捕捉街道路面的画面,然后以AR实景的方式呈现在高德地图软件中. ...

  8. android 高德地图设置不能旋转_这个地图APP,专注于地图软件该做的事!

    Bmap Bmap,简单的双地图应用.可任意切换/高德地图数据源,致力满足日常生活的出行需求.具有步行.公交.骑行.驾驶等出行方案,查看街景. 新版特性 1.升级百度地图sdk6.0.0 2.升级高德 ...

  9. 高德地图怎么画圈_高德地图 Javascript API 入门(二)

    高德地图 Javascript API 入门(二) 鼠标工具插件 测量距离 JS map.plugin(["AMap.MouseTool"],function () { var m ...

最新文章

  1. SGU 282 Isomorphism
  2. ajax返回的是流如何转换为pdf,如何在AJAX请求成功响应中返回PDF文件
  3. [匈牙利] 洛谷 P2526 小狗散步
  4. 深度学习数据更换背景_开始学习数据科学的最佳方法是了解其背景
  5. 第64节:Java中的Spring Boot 2.0简介笔记
  6. VSCode 写python,打印中文输出乱码
  7. markdown新手入门使用指南
  8. treeview的checkbox展开节点
  9. 安装alexa和google play
  10. 保研面试/考研复试英语口语常见问题整理
  11. 世界最大最高摩天轮,迪拜之眼迎来首批游客
  12. 3. 几何图形(Geometry)
  13. Excel.Application使用手册
  14. ISO/IEC 29134
  15. 安卓逆向——dy急速版设备抓包分析
  16. 我的2013——学习生活总结
  17. php赤兔cms商业破解,赤兔CMS影院开源免费PHP版一键采集综合影视资源站
  18. 水面模拟--波动方程
  19. 【面向对象】小游戏“终结者”程序的设计与实现
  20. 中国电子学会scratch等级考试三级历年真题解析【持续更新 已更新至2022年9月】

热门文章

  1. java 简单文件加密
  2. sql大全超详细【转】
  3. 苹果安卓APP下载地址合并为一个二维码
  4. 年会特辑丨池龙:上海“一网通办”政务服务模式分享
  5. 15.模拟e^x的麦克劳林展开式
  6. 超最小二乘椭圆拟合函数----MATLAB实现
  7. Linux下基于Openstack安装部署私有云
  8. 吐槽弹幕网,解决映兔源无法播放的书签插件
  9. Mars3D开发基础学习:场景特效
  10. Freemarker操作word文档