开源组件名称

地震来了

开源组件说明及使用场景

本应用使用高德安卓地图SDK,当遇到自然灾害如地震时,为了有助于救援的快速进行,由用户基于位置上传受灾或救援信息,供灾民和营救人员辅助决策。

开源组件所使用的技术

本工程为基于高德地图Android SDK进行封装,实现了用户自定义上传信息。

Git代码托管地址

https://git.oschina.net/gandalfnl/earthquakeicg.git

开源组件截图

震源位置闪烁显示

点击位置图标左上角显示用户上传的详细信息

用户长按有最新信息的某一位置,弹出如下界面,输入相关信息

输入完信息

并点击确定后生成标记图标,并显示用户输入的信息


安装包下载地址


主要代码:

package com.example.earthquakeicg;import java.util.ArrayList;
import android.app.Activity;
import android.graphics.Point;
import android.os.Bundle;
import android.os.Handler;
import android.os.SystemClock;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;import com.amap.api.maps2d.AMap;
import com.amap.api.maps2d.CameraUpdateFactory;
import com.amap.api.maps2d.MapView;
import com.amap.api.maps2d.Projection;
import com.amap.api.maps2d.AMap.InfoWindowAdapter;
import com.amap.api.maps2d.AMap.OnInfoWindowClickListener;
import com.amap.api.maps2d.AMap.OnMapClickListener;
import com.amap.api.maps2d.AMap.OnMapLoadedListener;
import com.amap.api.maps2d.AMap.OnMapLongClickListener;
import com.amap.api.maps2d.AMap.OnMarkerClickListener;
import com.amap.api.maps2d.model.BitmapDescriptor;
import com.amap.api.maps2d.model.BitmapDescriptorFactory;
import com.amap.api.maps2d.model.LatLng;
import com.amap.api.maps2d.model.LatLngBounds;
import com.amap.api.maps2d.model.Marker;
import com.amap.api.maps2d.model.MarkerOptions;
import com.example.earthquakeicg.Constants;
import com.example.earthquakeicg.ToastUtil;import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.BounceInterpolator;
import android.view.animation.Interpolator;public class MainActivity extends Activity   implements  OnMapClickListener,
OnMapLongClickListener,OnMarkerClickListener,OnClickListener,
OnInfoWindowClickListener, OnMapLoadedListener, InfoWindowAdapter {private MapView mapView;private AMap aMap;private TextView mTapTextView;private EditText mInputText; private EditText mInputText2;private Button ybutton;private Button nbutton;private String mtitle="";private String mcontent="";private float mlatitude=0;private float mlongitude=0;        @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// R 需要引用包import com.amapv2.apis.R;setContentView(R.layout.activity_main);mapView = (MapView) findViewById(R.id.map);mapView.onCreate(savedInstanceState);// 必须要写init();}private void init() {if (aMap == null) {aMap = mapView.getMap();setUpMap();}mTapTextView = (TextView) findViewById(R.id.tap_text);mInputText = (EditText) findViewById(R.id.inputtext);mInputText2 = (EditText) findViewById(R.id.EditText01);ybutton = (Button) findViewById(R.id.button1);nbutton = (Button) findViewById(R.id.button2);mInputText.setVisibility(View.INVISIBLE); mInputText2.setVisibility(View.INVISIBLE); ybutton.setVisibility(View.INVISIBLE); nbutton.setVisibility(View.INVISIBLE); ybutton.setOnClickListener(this);nbutton.setOnClickListener(this);//radioOption = (RadioGroup) findViewById(R.id.custom_info_window_options);}//@Override private void setUpMap() {aMap.setOnMapClickListener(this);// 对amap添加单击地图事件监听器aMap.setOnMapLongClickListener(this);// 对amap添加长按地图事件监听器aMap.setOnMapLoadedListener(this);// 设置amap加载成功事件监听器aMap.setOnMarkerClickListener(this);// 设置点击marker事件监听器aMap.setOnInfoWindowClickListener(this);// 设置点击infoWindow事件监听器aMap.setInfoWindowAdapter(this);// 设置自定义InfoWindow样式addMarkersToMap();// 往地图上添加marker}@Overrideprotected void onResume() {super.onResume();mapView.onResume();}@Overrideprotected void onPause() {super.onPause();mapView.onPause();}@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);mapView.onSaveInstanceState(outState);}@Overrideprotected void onDestroy() {super.onDestroy();mapView.onDestroy();}  /*** 在地图上添加marker*/private void addMarkersToMap() {aMap.addMarker(new MarkerOptions().anchor(0.5f, 0.5f).position(Constants.Babaocun).title("八宝村沙子厂").snippet("时间:2014-8-05;\n八宝村沙子厂房屋倒塌严重,没有伤亡,没帐篷,水,食物需要药品及食物。").draggable(true));aMap.addMarker(new MarkerOptions().anchor(0.5f, 0.5f).position(Constants.Laojiezi).title("龙头山镇光明村老街子").snippet("时间:2014-8-04 ;\n道路全部堵塞,土房全部倒塌,山体开裂严重,可能出现山体滑坡!其中菜园子有200多人被困缺乏食物、饮用水、帐篷。4人遇难,救出两位小孩,其中一个已经没有生命迹象,另外还有两个大人被埋,村民正在救援。一个小时前有十几位官兵徒步进入,目前还没有到达村里!").draggable(true));aMap.addMarker(new MarkerOptions().anchor(0.5f, 0.5f).position(Constants.Tianshengqiaocun).title("天生桥村").snippet("时间:2014-8-04 ;\n一半以上房屋倒塌,尚无救援力量到达。求救人余先生的妹妹被埋压。").draggable(true));aMap.addMarker(new MarkerOptions().anchor(0.5f, 0.5f).position(Constants.Shuijingwan).title("龙头山镇新民村水井湾社").snippet("时间:2014-8-04 ;\n通往县城的路断了,有伤员出不去,现在有医生进入无救援队进入。刚下过暴雨,没有帐篷,缺少吃的,保暖衣物,也没有紧急避难场所。").draggable(true));aMap.addMarker(new MarkerOptions().anchor(0.5f, 0.5f).position(Constants.Zhichangxiang).title("纸厂乡安置点").snippet("时间:2014-8-05 ;\n会泽县纸厂乡中学临时安置点,8台炊具车免费为受灾群众供应晚饭,四菜一汤,还有肉,1200余受灾群众就餐。").draggable(true));drawMarkers();// 添加10个带有系统默认icon的marker}public void drawMarkers() {// 动画效果ArrayList<BitmapDescriptor> giflist = new ArrayList<BitmapDescriptor>();giflist.add(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE));giflist.add(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED));giflist.add(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_YELLOW));Marker marker = aMap.addMarker(new MarkerOptions().anchor(0.5f, 0.5f).position(Constants.Zhenzhong).title("云南昭通6.5级地震(震源)").icons(giflist).snippet("2014-8-03-16:30;震源深度12公里。。").draggable(true).period(3));marker.showInfoWindow();// 设置默认显示一个infowinfow}/*** 对marker标注点点击响应事件*/@Overridepublic boolean onMarkerClick(final Marker marker) {//jumpPoint(marker);    mTapTextView.setText("详细信息:" + marker.getTitle()+"\n"+"坐标:"+marker.getPosition()+"\n"+marker.getSnippet());marker.showInfoWindow();     return false;}/*** marker点击时跳动一下*/public void jumpPoint(final Marker marker) {final Handler handler = new Handler();final long start = SystemClock.uptimeMillis();Projection proj = aMap.getProjection();Point startPoint = proj.toScreenLocation(Constants.Zhenzhong);startPoint.offset(0, -100);final LatLng startLatLng = proj.fromScreenLocation(startPoint);final long duration = 1500;final Interpolator interpolator = new BounceInterpolator();handler.post(new Runnable() {@Overridepublic void run() {long elapsed = SystemClock.uptimeMillis() - start;float t = interpolator.getInterpolation((float) elapsed/ duration);double lng = t * Constants.Zhenzhong.longitude + (1 - t)* startLatLng.longitude;double lat = t * Constants.Zhenzhong.latitude + (1 - t)* startLatLng.latitude;marker.setPosition(new LatLng(lat, lng));aMap.invalidate();// 刷新地图if (t < 1.0) {handler.postDelayed(this, 16);}}});}/*** 监听点击infowindow窗口事件回调*/@Overridepublic void onInfoWindowClick(Marker marker) {//ToastUtil.show(this, "你点击了infoWindow窗口" + marker.getTitle());           }/*** 监听amap地图加载成功事件回调*/@Overridepublic void onMapLoaded() {// 设置所有maker显示在当前可视区域地图中LatLngBounds bounds = new LatLngBounds.Builder().include(Constants.Babaocun).include(Constants.Laojiezi).include(Constants.Zhenzhong).include(Constants.Tianshengqiaocun).include(Constants.Shuijingwan).build();aMap.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, 10));}/*** 监听自定义infowindow窗口的infocontents事件回调*/@Overridepublic View getInfoContents(Marker marker) {return null;}/*** 监听自定义infowindow窗口的infowindow事件回调*/@Overridepublic View getInfoWindow(Marker marker) {return null;}/*** 对单击地图事件回调*///@Overridepublic void onMapClick(LatLng point) {}/*** 对长按地图事件回调*///@Overridepublic void onMapLongClick(LatLng point) {          mInputText.setVisibility(View.VISIBLE); mInputText2.setVisibility(View.VISIBLE);ybutton.setVisibility(View.VISIBLE); nbutton.setVisibility(View.VISIBLE);   mlatitude=(float)point.latitude;mlongitude=(float)point.longitude;                }@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.button1:{mInputText.setVisibility(View.INVISIBLE); mInputText2.setVisibility(View.INVISIBLE);ybutton.setVisibility(View.INVISIBLE); nbutton.setVisibility(View.INVISIBLE);            mtitle=mInputText.getText().toString();mcontent=mInputText2.getText().toString();LatLng mpos =new LatLng(mlatitude, mlongitude);                             aMap.addMarker(new MarkerOptions().anchor(0.5f, 0.5f).position(mpos).title(mtitle).snippet(mcontent).draggable(true));  }break;case R.id.button2:{mInputText.setVisibility(View.INVISIBLE); mInputText2.setVisibility(View.INVISIBLE);ybutton.setVisibility(View.INVISIBLE); nbutton.setVisibility(View.INVISIBLE); mtitle="";mcontent="";}break;default:break;}}}

转载于:https://my.oschina.net/weugiser/blog/308540

【高德LBS开源组件大赛】地震来了相关推荐

  1. 【高德LBS开源组件大赛】iOS版地图选中Overlay功能组件

    2019独角兽企业重金招聘Python工程师标准>>> ##开源组件名称 iOS版地图选中Overlay功能组件​ ##开源组件说明及使用场景 提供在iOS版地图中选中Overlay ...

  2. 高德LBS江湖召集令!妹子开发的公众号地图工具

    高德LBS江湖召集令之高手过招! --优秀组件推荐第一回 公众号地图工具 高德LBS开源组件大赛上线两周,我们收获了很多同学的报名,也开始收获第一波作品~~超出预期的精彩!!!!果真应验那句古话:&q ...

  3. 开源组件websocket-sharp中基于webapi的httpserver使用体验

    一.背景 因为需要做金蝶ERP的二次开发,金蝶ERP的开放性真是不错,但是二次开发金蝶一般使用引用BOS.dll的方式,这个dll对newtonsoft.json.dll这个库是强引用,必须要用4.0 ...

  4. 中关村开源创新大赛-达闼赛道如火如荼进行中

    导语 为庆祝中国共产党成立100周年,中关村软件园携手云端机器人运营商达闼,联合举办了中关村开源创新大赛-达闼赛道,暨"不忘初心 AI创时代"达闼智能服务机器人编舞大赛.在小姜的灵 ...

  5. Sonatype收购Vor Security,扩展对Nexus开源组件的支持

    今年六月,Sonatype宣布收购Vor Security.此次收购意在扩展Sonatype开源组件智能解决方案的覆盖范围,以包括Ruby.PHP.CocoaPods.Swift.Golang.C和C ...

  6. .net 开源组件推荐 之 StackExchange

    原文:.net 开源组件推荐 之 StackExchange 已经两年没更新过博客了!!! StackExchange,地址:https://github.com/StackExchange,开源的这 ...

  7. Uncode系列开源组件简介

    概述 Uncode 是基于Java 语言的一系列企业级开源组件,作者冶卫军 (开源作者花费大量时间维护开源项目,期望正确使用).主要包括:移动后端开发框架Uncode-BaaS ,通用数据库访问组件U ...

  8. java去掉rn,React Native删除第三方开源组件的依赖包

    最近项目即将上线,但是遇到了一个问题,安装之后第一次打开时,在有的Android手机上崩溃,之后再次运行就好了,好多Android机型都遇到这种情况,定位问题,发现是之前加载的第三方开源控件:reac ...

  9. SSH客户端开发开源组件Ganymed SSH-2 for Java初体验

    1.Ganymed SSH-2 for Java Ganymed SSH-2 for Java是一个纯Java实现的SHH2库. 看官方介绍: Ganymed SSH-2 for Java is a ...

最新文章

  1. 皮克斯技术指导辞职读博:研究AI设计怪物,从《游戏王》卡牌开始
  2. asp.net基础复习(二)——母版页
  3. 两千年是不是闰年 输出错误_干货!AMOS常见的10种错误及解决办法!
  4. 2019软博会“核心软件创新发展”主题论坛成功召开
  5. SpringBoot2.1.5 (32)--- SpringBoot整合 Freemaker 模板引擎
  6. iOS10 CAAnimationDelegate适配引申到条件编译
  7. 运放输入偏置电流方向_运算放大器的输入偏置电流
  8. python小数乘法计算题_100道小数乘法计算题
  9. 7-176 数列求和
  10. 统计一组名字中每个姓出现的次数
  11. U8g2库支持的屏幕类型总表以及构造器选择
  12. NE555时基电路实验(二)NE555控制LED闪烁
  13. Oracle启用scott两种方法
  14. 你知道自己究竟“想要”什么,又该如何“做到”吗?--《认知觉醒》读书笔记
  15. 【Python_006】Python爬虫抓取豆瓣电影影评
  16. 拉格朗日对偶函数拉格朗日对偶问题
  17. OSChina 周日乱弹 —— 什么时候可以在自己电脑上装鸿蒙
  18. 跟我学AngularJs:AngularJs入门及第一个实例
  19. 使用DL4J读取词向量并计算语义相似度
  20. 微信公众号“链接”与“超链接”知识大全

热门文章

  1. RabbitMQ五种工作模式
  2. 裸辞4个月,面试了30家公司,终于找到了理想的工作
  3. zabbix学习4: 监控Java原理-zabbix性能优化-低级自动发现-zabbix api
  4. 一键加密:WPS(Wi-Fi Protected Setup,Wi-Fi保护设置)
  5. 网站流量度量术语 IP PV UV
  6. Windows如何使文件显示扩展名
  7. R语言 自定义函数之趣味程序--老虎机
  8. 电脑投屏到电视android,电脑怎么投屏到电视?看完这篇文章你就懂了
  9. 抖音视频突然播放量少了很多,抖音限流怎么查看?
  10. 电脑重启后自带键盘失灵而外接键盘有用的一种情况