osmdroid绘制点线面(比例尺,缩小放大,导航图标等),地图的基本用法都有。需要注意就是自已位置的图标出现,一定要有打开gps,打开gps之后,获取屏幕地图的坐标也是能获取的。这次的项目代码打包,在之前两篇的osmdroid 相关博客基础上扩展的。所以有更加全面的介绍。

android osmdroid 加载常用离线地图格式(开源的在线地图)
android osmdroid 加载离线地图map格式以及地图网格绘制
这篇博客的项目代码:http://download.csdn.net/detail/qq_16064871/9826842

1,图片介绍

这就是项目整体功能了。

2,绘制5万个点

这是5万个点用一个图层来绘制,当然你也可以使用ondraw 一个个点换算屏幕坐标的绘制。
package com.osmdroid.sample.overlay;import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;
import android.widget.Toast;import com.osmdroid.sample.util.BaseSampleFragment;import org.osmdroid.api.IGeoPoint;
import org.osmdroid.views.MapView;
import org.osmdroid.views.overlay.simplefastpoint.LabelledGeoPoint;
import org.osmdroid.views.overlay.simplefastpoint.SimpleFastPointOverlay;
import org.osmdroid.views.overlay.simplefastpoint.SimpleFastPointOverlayOptions;
import org.osmdroid.views.overlay.simplefastpoint.SimplePointTheme;import java.util.ArrayList;
import java.util.List;/*** Example of SimpleFastPointOverlay* Created by Miguel Porto on 12-11-2016.*/public class SampleSimpleFastPointOverlay extends BaseSampleFragment {@Overridepublic String getSampleTitle() {return "Simple Fast Point Overlay with 10k points";}@Overrideprotected void addOverlays() {super.addOverlays();// create 10k labelled points// in most cases, there will be no problems of displaying >100k points, feel free to tryList<IGeoPoint> points = new ArrayList<>();for (int i = 0; i < 50000; i++) {points.add(new LabelledGeoPoint(37 + Math.random() * 5, -8 + Math.random() * 5, "Point #" + i));}// wrap them in a themeSimplePointTheme pt = new SimplePointTheme(points, true);// create label stylePaint textStyle = new Paint();textStyle.setStyle(Paint.Style.FILL);textStyle.setColor(Color.parseColor("#0000ff"));textStyle.setTextAlign(Paint.Align.CENTER);textStyle.setTextSize(24);// set some visual options for the overlay// we use here MAXIMUM_OPTIMIZATION algorithm, which works well with >100k pointsSimpleFastPointOverlayOptions opt = SimpleFastPointOverlayOptions.getDefaultStyle().setAlgorithm(SimpleFastPointOverlayOptions.RenderingAlgorithm.MAXIMUM_OPTIMIZATION).setRadius(7).setIsClickable(true).setCellSize(15).setTextStyle(textStyle);// create the overlay with the themefinal SimpleFastPointOverlay sfpo = new SimpleFastPointOverlay(pt, opt);// onClick callbacksfpo.setOnClickListener(new SimpleFastPointOverlay.OnClickListener() {@Overridepublic void onClick(SimpleFastPointOverlay.PointAdapter points, Integer point) {Toast.makeText(mMapView.getContext(), "You clicked " + ((LabelledGeoPoint) points.get(point)).getLabel(), Toast.LENGTH_SHORT).show();}});// add overlaymMapView.getOverlays().add(sfpo);// zoom to its bounding boxmMapView.addOnFirstLayoutListener(new MapView.OnFirstLayoutListener() {@Overridepublic void onFirstLayout(View v, int left, int top, int right, int bottom) {if(mMapView != null && mMapView.getController() != null) {mMapView.getController().zoomTo(6);mMapView.zoomToBoundingBox(sfpo.getBoundingBox(), true);}}});}}

另外一种绘制的形式

package com.osmdroid.sample.overlay;import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;import org.osmdroid.views.MapView;
import org.osmdroid.views.Projection;
import org.osmdroid.views.overlay.Overlay;/*** 自定义绘制的地图坐标*/
public class CustomPointOverlay extends Overlay {private final Point mMapCoordsProjected = new Point();private final Point mMapCoordsTranslated = new Point();protected Paint mCirclePaint = new Paint();public CustomPointOverlay() {}static CustomPointOverlay mGisOverlay = null;public static CustomPointOverlay GetInstance() {if (mGisOverlay == null) {synchronized (CustomPointOverlay.class) {if (mGisOverlay == null) {mGisOverlay = new CustomPointOverlay();}}}return mGisOverlay;}@Overridepublic void draw(Canvas canvas, MapView mapView, boolean shadow) {//经纬度坐标到屏幕坐标的转换mapView.getProjection().toProjectedPixels(23.12658183, 113.365588756, mMapCoordsProjected);Projection pj = mapView.getProjection();pj.toPixelsFromProjected(mMapCoordsProjected, mMapCoordsTranslated);//            final float radius = lastFix.getAccuracy()
//                    / (float) TileSystem.GroundResolution(lastFix.getLatitude(),
//                    mapView.getZoomLevel());final float radius = 10L;mCirclePaint.setColor(Color.BLUE);mCirclePaint.setStyle(Paint.Style.FILL);canvas.drawCircle(mMapCoordsTranslated.x, mMapCoordsTranslated.y, radius, mCirclePaint);}
}

3,绘制线

绘制线也是一样啦。使用这个类就行,Polyline
      // create 10k labelled points// in most cases, there will be no problems of displaying >100k points, feel free to tryList<org.osmdroid.util.GeoPoint> points = new ArrayList<>();for (int i = 0; i < 1000; i++) {points.add(new GeoPoint(37 + Math.random() * 5, -8 + Math.random() * 5, 0));}//随机产生的1000个点并连成线if(points.size()>0){org.osmdroid.views.overlay.Polyline Polyline=new org.osmdroid.views.overlay.Polyline();Polyline.setWidth(2);Polyline.setColor(0xFF1B7BCD);Polyline.setPoints(points);mapView.getOverlays().add(Polyline);}//计算边界值,定位边界final BoundingBox box = new BoundingBox(37,-8,42,-3);// zoom to its bounding boxmapView.addOnFirstLayoutListener(new MapView.OnFirstLayoutListener() {@Overridepublic void onFirstLayout(View v, int left, int top, int right, int bottom) {if(mapView != null && mapView.getController() != null) {mapView.getController().zoomTo(6);mapView.zoomToBoundingBox(box, true);}}});}//如果线的绘制,要实时绘制,可采用类似格网绘图,及时地图增加移动,放大,缩小里面监听//进行图层的重绘

4,绘制面

使用 polygon
        // create 10k labelled points// in most cases, there will be no problems of displaying >100k points, feel free to tryList<GeoPoint> points = new ArrayList<>();for (int i = 0; i < 1000; i++) {points.add(new GeoPoint(37 + Math.random() * 5, -8 + Math.random() * 5, 0));}//随机产生的1000个点并连成面if(points.size()>0){org.osmdroid.views.overlay.Polygon polygon=new org.osmdroid.views.overlay.Polygon();polygon.setStrokeWidth(1);polygon.setFillColor(0x8032B5EB);polygon.setStrokeColor(Color.BLUE);polygon.setPoints(points);mapView.getOverlays().add(polygon);}//计算边界值,定位边界final BoundingBox box = new BoundingBox(37,-8,42,-3);// zoom to its bounding boxmapView.addOnFirstLayoutListener(new MapView.OnFirstLayoutListener() {@Overridepublic void onFirstLayout(View v, int left, int top, int right, int bottom) {if(mapView != null && mapView.getController() != null) {mapView.getController().zoomTo(6);mapView.zoomToBoundingBox(box, true);}}});

5,基本配置,比例尺,缩小,放大

package com.osmdroid.sample;import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.DisplayMetrics;
import android.view.View;
import android.widget.Toast;import org.osmdroid.api.IGeoPoint;
import org.osmdroid.tileprovider.tilesource.TileSourceFactory;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapView;
import org.osmdroid.views.overlay.ScaleBarOverlay;
import org.osmdroid.views.overlay.compass.CompassOverlay;
import org.osmdroid.views.overlay.compass.InternalCompassOrientationProvider;
import org.osmdroid.views.overlay.gestures.RotationGestureOverlay;
import org.osmdroid.views.overlay.mylocation.GpsMyLocationProvider;
import org.osmdroid.views.overlay.mylocation.MyLocationNewOverlay;
import org.osmdroid.views.overlay.simplefastpoint.LabelledGeoPoint;
import org.osmdroid.views.overlay.simplefastpoint.SimpleFastPointOverlay;
import org.osmdroid.views.overlay.simplefastpoint.SimpleFastPointOverlayOptions;
import org.osmdroid.views.overlay.simplefastpoint.SimplePointTheme;import java.util.ArrayList;
import java.util.List;public class BasicMapTestActivity extends AppCompatActivity implements View.OnClickListener {private MapView mapView;//地图旋转private RotationGestureOverlay mRotationGestureOverlay;//比例尺private ScaleBarOverlay mScaleBarOverlay;//指南针方向private CompassOverlay mCompassOverlay = null;//设置导航图标的位置private MyLocationNewOverlay mLocationOverlay;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_basic_test);initView();}private void initView() {findViewById(R.id.button1).setOnClickListener(this);findViewById(R.id.button2).setOnClickListener(this);findViewById(R.id.button3).setOnClickListener(this);findViewById(R.id.button4).setOnClickListener(this);mapView = (MapView) findViewById(R.id.mymapview);mapView.setDrawingCacheEnabled(true);mapView.setMaxZoomLevel(20);mapView.setMinZoomLevel(6);mapView.getController().setZoom(12);mapView.setTileSource(TileSourceFactory.MAPNIK);mapView.setUseDataConnection(true);mapView.setMultiTouchControls(true);// 触控放大缩小//是否显示地图数据源mapView.getOverlayManager().getTilesOverlay().setEnabled(true);//地图自由旋转mRotationGestureOverlay = new RotationGestureOverlay(mapView);mRotationGestureOverlay.setEnabled(true);mapView.getOverlays().add(this.mRotationGestureOverlay);//比例尺配置final DisplayMetrics dm = getResources().getDisplayMetrics();mScaleBarOverlay = new ScaleBarOverlay(mapView);mScaleBarOverlay.setCentred(true);mScaleBarOverlay.setAlignBottom(true); //底部显示mScaleBarOverlay.setScaleBarOffset(dm.widthPixels / 5, 80);mapView.getOverlays().add(this.mScaleBarOverlay);//指南针方向mCompassOverlay = new CompassOverlay(this, new InternalCompassOrientationProvider(this),mapView);mCompassOverlay.enableCompass();mapView.getOverlays().add(this.mCompassOverlay);//设置导航图标this.mLocationOverlay = new MyLocationNewOverlay(new GpsMyLocationProvider(this),mapView);mapView.getOverlays().add(this.mLocationOverlay);mLocationOverlay.enableMyLocation();  //设置可视}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.button1://定位当前的位置,并设置缩放级别mapView.getController().setZoom(18);mapView.getController().setCenter(new GeoPoint(23.12648183, 113.365548756));break;case R.id.button2: //绘制点List<IGeoPoint> points = new ArrayList<>();points.add(new LabelledGeoPoint(23.12658183, 113.365588756 , "Point #" + 1));points.add(new LabelledGeoPoint(23.12647183, 113.365558756 , "Point #" + 2));// wrap them in a themeSimplePointTheme pt = new SimplePointTheme(points, true);// create label stylePaint textStyle = new Paint();textStyle.setStyle(Paint.Style.FILL);textStyle.setColor(Color.parseColor("#0000ff"));textStyle.setTextAlign(Paint.Align.CENTER);textStyle.setTextSize(24);// set some visual options for the overlay// we use here MAXIMUM_OPTIMIZATION algorithm, which works well with >100k pointsSimpleFastPointOverlayOptions opt = SimpleFastPointOverlayOptions.getDefaultStyle().setAlgorithm(SimpleFastPointOverlayOptions.RenderingAlgorithm.MAXIMUM_OPTIMIZATION).setRadius(7).setIsClickable(true).setCellSize(15).setTextStyle(textStyle);// create the overlay with the themefinal SimpleFastPointOverlay sfpo = new SimpleFastPointOverlay(pt, opt);// onClick callbacksfpo.setOnClickListener(new SimpleFastPointOverlay.OnClickListener() {@Overridepublic void onClick(SimpleFastPointOverlay.PointAdapter points, Integer point) {Toast.makeText(mapView.getContext(), "You clicked " + ((LabelledGeoPoint) points.get(point)).getLabel(), Toast.LENGTH_SHORT).show();}});// add overlaymapView.getOverlays().add(sfpo);break;case R.id.button3://缩小mapView.getController().zoomOut();break;case R.id.button4://放大mapView.getController().zoomIn();break;}}@Overridepublic void onPause() {this.mLocationOverlay.disableMyLocation();super.onPause();}@Overridepublic void onResume() {super.onResume();}
}

package com.osmdroid.sample;import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.DisplayMetrics;
import android.view.View;import org.osmdroid.tileprovider.tilesource.TileSourceFactory;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapView;
import org.osmdroid.views.overlay.ScaleBarOverlay;
import org.osmdroid.views.overlay.compass.CompassOverlay;
import org.osmdroid.views.overlay.compass.InternalCompassOrientationProvider;
import org.osmdroid.views.overlay.gestures.RotationGestureOverlay;
import org.osmdroid.views.overlay.mylocation.GpsMyLocationProvider;
import org.osmdroid.views.overlay.mylocation.MyLocationNewOverlay;public class BasicMapTestActivity3 extends AppCompatActivity implements View.OnClickListener ,LocationListener {private MapView mapView;//地图旋转private RotationGestureOverlay mRotationGestureOverlay;//比例尺private ScaleBarOverlay mScaleBarOverlay;//指南针方向private CompassOverlay mCompassOverlay = null;//设置导航图标的位置private MyLocationNewOverlay mLocationOverlay;private LocationManager lm;private Location currentLocation = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_basic_test_3);initView();}private void initView() {findViewById(R.id.button1).setOnClickListener(this);findViewById(R.id.button2).setOnClickListener(this);mapView = (MapView) findViewById(R.id.mymapview);mapView.setDrawingCacheEnabled(true);mapView.setMaxZoomLevel(20);mapView.setMinZoomLevel(6);mapView.getController().setZoom(12);mapView.setTileSource(TileSourceFactory.MAPNIK);mapView.setUseDataConnection(true);mapView.setMultiTouchControls(true);// 触控放大缩小//是否显示地图数据源mapView.getOverlayManager().getTilesOverlay().setEnabled(true);//地图自由旋转mRotationGestureOverlay = new RotationGestureOverlay(mapView);mRotationGestureOverlay.setEnabled(true);mapView.getOverlays().add(this.mRotationGestureOverlay);//比例尺配置final DisplayMetrics dm = getResources().getDisplayMetrics();mScaleBarOverlay = new ScaleBarOverlay(mapView);mScaleBarOverlay.setCentred(true);mScaleBarOverlay.setAlignBottom(true); //底部显示mScaleBarOverlay.setScaleBarOffset(dm.widthPixels / 5, 80);mapView.getOverlays().add(this.mScaleBarOverlay);//指南针方向mCompassOverlay = new CompassOverlay(this, new InternalCompassOrientationProvider(this),mapView);mCompassOverlay.enableCompass();mapView.getOverlays().add(this.mCompassOverlay);//设置导航图标this.mLocationOverlay = new MyLocationNewOverlay(new GpsMyLocationProvider(this),mapView);mapView.getOverlays().add(this.mLocationOverlay);mLocationOverlay.enableMyLocation();  //设置可视}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.button1:if (currentLocation != null) {GeoPoint myPosition = new GeoPoint(currentLocation.getLatitude(), currentLocation.getLongitude());mapView.getController().animateTo(myPosition);}break;case R.id.button2:if (!mLocationOverlay.isFollowLocationEnabled()) {mLocationOverlay.enableFollowLocation();} else {mLocationOverlay.disableFollowLocation();}break;}}@Overridepublic void onLocationChanged(Location location) {currentLocation=location;}@Overridepublic void onStatusChanged(String provider, int status, Bundle extras) {}@Overridepublic void onProviderEnabled(String provider) {}@Overridepublic void onProviderDisabled(String provider) {}@Overridepublic void onPause() {super.onPause();try{lm.removeUpdates(this);}catch (Exception ex){}mCompassOverlay.disableCompass();mLocationOverlay.disableFollowLocation();mLocationOverlay.disableMyLocation();mScaleBarOverlay.enableScaleBar();}@Overridepublic void onResume(){super.onResume();lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);try{//this fails on AVD 19s, even with the appcompat check, says no provided named gps is availablelm.requestLocationUpdates(LocationManager.GPS_PROVIDER,0l,0f,this);}catch (Exception ex){}try{lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0l,0f,this);}catch (Exception ex){}mLocationOverlay.enableFollowLocation();mLocationOverlay.enableMyLocation();mScaleBarOverlay.disableScaleBar();}
}

package com.osmdroid.sample;import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.DisplayMetrics;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;import com.osmdroid.sample.overlay.CustomPointOverlay;
import com.osmdroid.sample.util.SomeDataMapManger;import org.osmdroid.tileprovider.tilesource.TileSourceFactory;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapView;
import org.osmdroid.views.overlay.ScaleBarOverlay;
import org.osmdroid.views.overlay.compass.CompassOverlay;
import org.osmdroid.views.overlay.compass.InternalCompassOrientationProvider;
import org.osmdroid.views.overlay.gestures.RotationGestureOverlay;
import org.osmdroid.views.overlay.mylocation.GpsMyLocationProvider;
import org.osmdroid.views.overlay.mylocation.MyLocationNewOverlay;public class BasicMapTestActivity2 extends AppCompatActivity implements View.OnClickListener {private MapView mapView;//地图旋转private RotationGestureOverlay mRotationGestureOverlay;//比例尺private ScaleBarOverlay mScaleBarOverlay;//指南针方向private CompassOverlay mCompassOverlay = null;//设置导航图标的位置private MyLocationNewOverlay mLocationOverlay;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_basic_test_2);initView();}private void initView() {findViewById(R.id.button1).setOnClickListener(this);findViewById(R.id.button2).setOnClickListener(this);findViewById(R.id.button3).setOnClickListener(this);findViewById(R.id.button4).setOnClickListener(this);mapView = (MapView) findViewById(R.id.mymapview);mapView.setDrawingCacheEnabled(true);mapView.setMaxZoomLevel(20);mapView.setMinZoomLevel(6);mapView.getController().setZoom(12);mapView.setTileSource(TileSourceFactory.MAPNIK);mapView.setUseDataConnection(true);mapView.setMultiTouchControls(true);// 触控放大缩小//是否显示地图数据源mapView.getOverlayManager().getTilesOverlay().setEnabled(true);//地图自由旋转mRotationGestureOverlay = new RotationGestureOverlay(mapView);mRotationGestureOverlay.setEnabled(true);mapView.getOverlays().add(this.mRotationGestureOverlay);//比例尺配置final DisplayMetrics dm = getResources().getDisplayMetrics();mScaleBarOverlay = new ScaleBarOverlay(mapView);mScaleBarOverlay.setCentred(true);mScaleBarOverlay.setAlignBottom(true); //底部显示mScaleBarOverlay.setScaleBarOffset(dm.widthPixels / 5, 80);mapView.getOverlays().add(this.mScaleBarOverlay);//指南针方向mCompassOverlay = new CompassOverlay(this, new InternalCompassOrientationProvider(this),mapView);mCompassOverlay.enableCompass();mapView.getOverlays().add(this.mCompassOverlay);//设置导航图标this.mLocationOverlay = new MyLocationNewOverlay(new GpsMyLocationProvider(this),mapView);mapView.getOverlays().add(this.mLocationOverlay);mLocationOverlay.enableMyLocation();  //设置可视}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.button1://定位当前的位置,并设置缩放级别mapView.getController().setZoom(18);mapView.getController().setCenter(new GeoPoint(23.12648183, 113.365548756));break;case R.id.button2: //绘制点// add overlaymapView.getOverlays().add(CustomPointOverlay.GetInstance());break;case R.id.button3://屏幕点击的坐标//这个功能的使用,需要打开gps,就是说gps有数据MyLocationOverlayWithClick overlay = new MyLocationOverlayWithClick(mapView);overlay.enableFollowLocation();overlay.enableMyLocation();mapView.getOverlayManager().add(overlay);break;case R.id.button4:SomeDataMapManger.initGeoJsonData(mapView,this);mapView.getController().setZoom(12);mapView.getController().setCenter(new GeoPoint(23.12648183, 113.365548756));break;}}public static class MyLocationOverlayWithClick extends MyLocationNewOverlay{public MyLocationOverlayWithClick(MapView mapView) {super(mapView);}@Overridepublic boolean onSingleTapConfirmed(MotionEvent e, MapView map) {if (getLastFix() != null)Toast.makeText(map.getContext(), "Tap! I am at " + getLastFix().getLatitude() + "," + getLastFix().getLongitude(), Toast.LENGTH_LONG).show();return true;}}@Overridepublic void onPause() {this.mLocationOverlay.disableMyLocation();super.onPause();}@Overridepublic void onResume() {super.onResume();}
}

android osmdroid 加载常用离线地图格式(开源的在线地图)

android osmdroid 加载离线地图map格式以及地图网格绘制

这篇博客的项目代码:http://download.csdn.net/detail/qq_16064871/9826842

android 开源库osmdroid绘制点线面(比例尺,缩小放大,导航图标等)相关推荐

  1. Android开源库集合(控件)

    RecycleView: RecycleView功能增强 https://github.com/Malinskiy/SuperRecyclerView RecycleView功能增强(拖拽,滑动删除, ...

  2. Android开源库V - Layout:淘宝、天猫都在用的UI框架,赶紧用起来吧!

    前言 V- Layout 是阿里出品的基础 UI 框架,用于快速实现页面的复杂布局,在手机天猫 Android版 内广泛使用 让人激动的是,在上个月V- Layout终于在Github上开源! Git ...

  3. Android开源库总结

    自己总结的Android开源项目及库. github排名https://github.com/trending, github搜索:https://github.com/search UI Aweso ...

  4. 关于Android开源库分享平台,(GitClub)微信小程序的开发体验

    七八月份的深圳一直在下雨,总有人说雨天适合窝在家看书,对于程序开发者来说更是难得的学习机会.我们502工作室的小伙伴利用这个时间学习了一下微信小程序开发,并上线了一个GitClub小程序,目前功能有些 ...

  5. Android 开源库获取途径整理

    最新内容请见原文: http://www.trinea.cn/android/android-open-project-summary/ 介绍目前收藏 Android 开源库比较多的 GitHub 项 ...

  6. 计算机视觉开源库OpenCV绘制轮廓,并将轮廓排序~

    计算机视觉开源库OpenCV绘制轮廓,并将轮廓排序~示例效果如下: 原图: 示例代码如下: #!/usr/bin/env python3import cv2def sort_contours(cnts ...

  7. Android开源库集合(UI效果)

    动画效果 粒子动画效果 https://github.com/glomadrian/Grav 水波式loading等待动画 https://github.com/race604/WaveLoading ...

  8. android 日历翻页动画,Android开源库合集:轻松实现Android动态,炫目:日历效果...

    前言: 了解过那种动态,炫目的日历效果吗?你知道是怎么 操作的嘛?是否想过,用UI就可以实现,对,也许你说的对,不过UI只是都是动态效果的一部分.那么今天用Annroid开源库,来告诉你android ...

  9. GitHub 上排名前 100 的 Android 开源库介绍

    转自:http://www.codeceo.com/article/github-top-100-android-libs.html 本项目主要对目前 GitHub 上排名前 100 的 Androi ...

最新文章

  1. SAP Variant Conditions in Purchasing using reference characteristics【中英文双语版】
  2. IP地址分类:静态/动态/公共/私有
  3. F5 配置手册 -F5 BIG-IP 10.1-3-配置-网络
  4. 如何在Windows 10上限制Wi​​ndows Update的下载带宽
  5. 软件工程讲义 0 微博上的软件工程
  6. 500 OOPS: vsftpd: both local and anonymous access disabled
  7. linux 远程拒绝服务,Linux Kernel SCTP远程拒绝服务漏洞
  8. mysqlfor循环中出错继续_运维大佬教你“打僵尸”——处理Linux系统中大量的僵尸进程(2)...
  9. 瞬时极性法对正负反馈的判断方法_何为反馈?如何判断?统统告诉你
  10. 【Prims】--【telerik】DataGridView 控件
  11. ThinkPHP的四种URL模式 URL_MODEL
  12. Android包体优化总结
  13. 字体管理工具字由 v2.4.0.0 绿色便携版
  14. 牛客网SQL实战二刷 | Day1
  15. 《笑傲江湖》清心普善咒——曲谱(琴箫合奏曲)
  16. 什么是熔断、降级、限流
  17. 七种策略助企业成功转型数字化
  18. Gvim高级操作001--对匹配关键字进行操作--数字运算结果替换
  19. C语言程序编译过程 2
  20. 《GIT视频教程》(p41~p44)

热门文章

  1. Android中添加Options Menu,按MENU键无反应
  2. javax.validation.constraints.NotNull找不到
  3. win10如何彻底关闭病毒实时保护
  4. 相位同步、频率同步、同相位时钟、同源时钟、同时钟域时钟和异步时钟区别。
  5. win10系统网络连接只显示飞行模式
  6. 公路建设路缘石有路缘石滑模机来帮忙
  7. 海外抖音如何引流到独立站或者其他电商平台渠道
  8. 强大的心理素质如何锻炼?心理素质提高五大方法
  9. 一位上海疫情下的悲催女程序员!
  10. 是——我说明白了么?而不是——你听懂了么?