編輯:關於Android編程
package com.imooc.baidumap; import java.util.List; import android.app.Activity; import android.content.Context; import android.graphics.Color; import android.graphics.Point; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.WindowManager; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import com.baidu.location.BDLocation; import com.baidu.location.BDLocationListener; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption; import com.baidu.mapapi.SDKInitializer; import com.baidu.mapapi.map.BaiduMap; import com.baidu.mapapi.map.BaiduMap.OnMapClickListener; import com.baidu.mapapi.map.BaiduMap.OnMarkerClickListener; import com.baidu.mapapi.map.BitmapDescriptor; import com.baidu.mapapi.map.BitmapDescriptorFactory; import com.baidu.mapapi.map.InfoWindow; import com.baidu.mapapi.map.InfoWindow.OnInfoWindowClickListener; import com.baidu.mapapi.map.MapPoi; import com.baidu.mapapi.map.MapStatusUpdate; import com.baidu.mapapi.map.MapStatusUpdateFactory; import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.map.Marker; import com.baidu.mapapi.map.MarkerOptions; import com.baidu.mapapi.map.MyLocationConfiguration; import com.baidu.mapapi.map.MyLocationConfiguration.LocationMode; import com.baidu.mapapi.map.MyLocationData; import com.baidu.mapapi.map.OverlayOptions; import com.baidu.mapapi.model.LatLng; import com.imooc.baidumap.MyOrientationListener.OnOrientationListener; public class MainActivity extends Activity { private MapView mMapView; private BaiduMap mBaiduMap; private Context context; // 定位相關 private LocationClient mLocationClient; private MyLocationListener mLocationListener; private boolean isFirstIn = true; private double mLatitude; private double mLongtitude; // 自定義定位圖標 private BitmapDescriptor mIconLocation; private MyOrientationListener myOrientationListener; private float mCurrentX; private LocationMode mLocationMode; // 覆蓋物相關 private BitmapDescriptor mMarker; private RelativeLayout mMarkerLy; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // requestWindowFeature(Window.FEATURE_NO_TITLE); // 在使用SDK各組件之前初始化context信息,傳入ApplicationContext // 注意該方法要再setContentView方法之前實現 // getWindow().setFlags(WindowManager.LayoutParams.FLAG_NEEDS_MENU_KEY, // WindowManager.LayoutParams.FLAG_NEEDS_MENU_KEY); SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_main); this.context = this; initView(); // 初始化定位 initLocation(); initMarker(); mBaiduMap.setOnMarkerClickListener(new OnMarkerClickListener() { @Override public boolean onMarkerClick(Marker marker) { Bundle extraInfo = marker.getExtraInfo(); Info info = (Info) extraInfo.getSerializable("info"); ImageView iv = (ImageView) mMarkerLy .findViewById(R.id.id_info_img); TextView distance = (TextView) mMarkerLy .findViewById(R.id.id_info_distance); TextView name = (TextView) mMarkerLy .findViewById(R.id.id_info_name); TextView zan = (TextView) mMarkerLy .findViewById(R.id.id_info_zan); iv.setImageResource(info.getImgId()); distance.setText(info.getDistance()); name.setText(info.getName()); zan.setText(info.getZan() + ""); InfoWindow infoWindow; TextView tv = new TextView(context); tv.setBackgroundResource(R.drawable.location_tips); tv.setPadding(30, 20, 30, 50); tv.setText(info.getName()); tv.setTextColor(Color.parseColor("#ffffff")); final LatLng latLng = marker.getPosition(); Point p = mBaiduMap.getProjection().toScreenLocation(latLng); p.y -= 47; LatLng ll = mBaiduMap.getProjection().fromScreenLocation(p); infoWindow = new InfoWindow(tv, ll, new OnInfoWindowClickListener() { @Override public void onInfoWindowClick() { mBaiduMap.hideInfoWindow(); } }); mBaiduMap.showInfoWindow(infoWindow); mMarkerLy.setVisibility(View.VISIBLE); return true; } }); mBaiduMap.setOnMapClickListener(new OnMapClickListener() { @Override public boolean onMapPoiClick(MapPoi arg0) { return false; } @Override public void onMapClick(LatLng arg0) { mMarkerLy.setVisibility(View.GONE); mBaiduMap.hideInfoWindow(); } }); } private void initMarker() { mMarker = BitmapDescriptorFactory.fromResource(R.drawable.maker); mMarkerLy = (RelativeLayout) findViewById(R.id.id_maker_ly); } private void initLocation() { mLocationMode = LocationMode.NORMAL; mLocationClient = new LocationClient(this); mLocationListener = new MyLocationListener(); mLocationClient.registerLocationListener(mLocationListener); LocationClientOption option = new LocationClientOption(); option.setCoorType("bd09ll"); option.setIsNeedAddress(true); option.setOpenGps(true); option.setScanSpan(1000); mLocationClient.setLocOption(option); // 初始化圖標 mIconLocation = BitmapDescriptorFactory .fromResource(R.drawable.navi_map_gps_locked); myOrientationListener = new MyOrientationListener(context); myOrientationListener .setOnOrientationListener(new OnOrientationListener() { @Override public void onOrientationChanged(float x) { mCurrentX = x; } }); } private void initView() { mMapView = (MapView) findViewById(R.id.id_bmapView); mBaiduMap = mMapView.getMap(); MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f); mBaiduMap.setMapStatus(msu); } @Override protected void onResume() { super.onResume(); // 在activity執行onResume時執行mMapView. onResume (),實現地圖生命周期管理 mMapView.onResume(); } @Override protected void onStart() { super.onStart(); // 開啟定位 mBaiduMap.setMyLocationEnabled(true); if (!mLocationClient.isStarted()) mLocationClient.start(); // 開啟方向傳感器 myOrientationListener.start(); } @Override protected void onPause() { super.onPause(); // 在activity執行onDestroy時執行mMapView.onDestroy(),實現地圖生命周期管理 mMapView.onPause(); } @Override protected void onStop() { super.onStop(); // 停止定位 mBaiduMap.setMyLocationEnabled(false); mLocationClient.stop(); // 停止方向傳感器 myOrientationListener.stop(); } @Override protected void onDestroy() { super.onDestroy(); // 在activity執行onDestroy時執行mMapView.onDestroy(),實現地圖生命周期管理 mMapView.onDestroy(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.id_map_common: mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL); break; case R.id.id_map_site: mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE); break; case R.id.id_map_traffic: if (mBaiduMap.isTrafficEnabled()) { mBaiduMap.setTrafficEnabled(false); item.setTitle("實時交通(off)"); } else { mBaiduMap.setTrafficEnabled(true); item.setTitle("實時交通(on)"); } break; case R.id.id_map_location: centerToMyLocation(); break; case R.id.id_map_mode_common: mLocationMode = LocationMode.NORMAL; break; case R.id.id_map_mode_following: mLocationMode = LocationMode.FOLLOWING; break; case R.id.id_map_mode_compass: mLocationMode = LocationMode.COMPASS; break; case R.id.id_add_overlay: addOverlays(Info.infos); break; default: break; } return super.onOptionsItemSelected(item); } /** * 添加覆蓋物 * * @param infos */ private void addOverlays(Listinfos) { mBaiduMap.clear(); LatLng latLng = null; Marker marker = null; OverlayOptions options; for (Info info : infos) { // 經緯度 latLng = new LatLng(info.getLatitude(), info.getLongitude()); // 圖標 options = new MarkerOptions().position(latLng).icon(mMarker) .zIndex(5); marker = (Marker) mBaiduMap.addOverlay(options); Bundle arg0 = new Bundle(); arg0.putSerializable("info", info); marker.setExtraInfo(arg0); } MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng); mBaiduMap.setMapStatus(msu); } /** * 定位到我的位置 */ private void centerToMyLocation() { LatLng latLng = new LatLng(mLatitude, mLongtitude); MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng); mBaiduMap.animateMapStatus(msu); } private class MyLocationListener implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location) { MyLocationData data = new MyLocationData.Builder()// .direction(mCurrentX)// .accuracy(location.getRadius())// .latitude(location.getLatitude())// .longitude(location.getLongitude())// .build(); mBaiduMap.setMyLocationData(data); // 設置自定義圖標 MyLocationConfiguration config = new MyLocationConfiguration( mLocationMode, true, mIconLocation); mBaiduMap.setMyLocationConfigeration(config); // 更新經緯度 mLatitude = location.getLatitude(); mLongtitude = location.getLongitude(); if (isFirstIn) { LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude()); MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng); mBaiduMap.animateMapStatus(msu); isFirstIn = false; Toast.makeText(context, location.getAddrStr(), Toast.LENGTH_SHORT).show(); } } } }
Cardview配合ImageView顯示圓形圖效果圖:剛在看自定義View的知識點時,突然想起來,如果CardView寬高相等,CardView設置圓角的半徑為寬高的一
RadioButton和CheckBox的區別: 1、單個RadioButton在選中後,通過點擊無法變為未選中 單個CheckBox在選中後,通過點擊可以變為未選中 2
綜述 View的繪制流程可以分為三大步,它們分別是measure,layout和draw過程。measure表示View的測量過程,用於測量View的寬度和高度;lay
一、適配器 ListItemClickAdapterpublic class ListItemClickAdapter extends BaseAdapter { pr