/**
* @description:
* @author chenshiqiang E-mail:csqwyyx@163.com
* @date 2014年5月3日 下午3:55:27
* @version 1.0
*/
package com.csq.thesceneryalong.ui.activitys;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import com.amap.api.maps.AMap;
import com.csq.thesceneryalong.R;
import com.csq.thesceneryalong.constant.GlobelConstants;
import com.csq.thesceneryalong.db.Scenery;
import com.csq.thesceneryalong.db.Track;
import com.csq.thesceneryalong.db.TrackPoint;
import com.csq.thesceneryalong.io.db.SceneryDb;
import com.csq.thesceneryalong.io.db.TrackDb;
import com.csq.thesceneryalong.io.db.TrackPointDb;
import com.csq.thesceneryalong.io.file.SpUtils;
import com.csq.thesceneryalong.logic.manager.MyLocationManager;
import com.csq.thesceneryalong.logic.manager.TrackManager;
import com.csq.thesceneryalong.models.events.EventCurTrackStatusChanged;
import com.csq.thesceneryalong.models.events.EventNewScenery;
import com.csq.thesceneryalong.models.events.EventNewTrackPoint;
import com.csq.thesceneryalong.models.events.EventSceneryNumChanged;
import com.csq.thesceneryalong.models.events.EventTrackUpdated;
import com.csq.thesceneryalong.models.models.PathConfig;
import com.csq.thesceneryalong.models.models.RecordStatus;
import com.csq.thesceneryalong.models.models.SceneryCluster;
import com.csq.thesceneryalong.ui.activitys.base.BaseActionBarActivity;
import com.csq.thesceneryalong.ui.fragments.base.BaseMapFragment;
import com.csq.thesceneryalong.ui.fragments.base.BaseMapFragment.MyLocationTypeListener;
import com.csq.thesceneryalong.ui.views.TrackCtrlView;
import com.csq.thesceneryalong.ui.views.TrackDetailDrawerView;
import com.csq.thesceneryalong.ui.widgets.MultiDirectionSlidingDrawer;
import com.csq.thesceneryalong.ui.widgets.MultiDirectionSlidingDrawer.OnDrawerCloseListener;
import com.csq.thesceneryalong.ui.widgets.MultiDirectionSlidingDrawer.OnDrawerOpenListener;
import com.csq.thesceneryalong.utils.CaptureMediaUtil;
import com.csq.thesceneryalong.utils.CaptureMediaUtil.MediaData;
import com.csq.thesceneryalong.utils.MapUtil;
import com.csq.thesceneryalong.utils.ToastUtil;
import com.csq.thesceneryalong.utils.dbmodel.SceneryUtil;
import com.csq.thesceneryalong.utils.dbmodel.TrackPointUtil;
import com.csq.thesceneryalong.utils.dbmodel.TrackUtil;
import com.csq.thesceneryalong.utils.location.GpsUtil;
import com.csq.thesceneryalong.utils.tasks.CsqBackgroundTask;
import com.gaode.maps.android.clustering.Cluster;
import com.gaode.maps.android.clustering.ClusterManager.OnClusterClickListener;
import com.gaode.maps.android.clustering.ClusterManager.OnClusterItemClickListener;
import com.nhaarman.supertooltips.ToolTip;
import com.nhaarman.supertooltips.ToolTipRelativeLayout;
import com.nhaarman.supertooltips.ToolTipView;
import com.nhaarman.supertooltips.ToolTipView.OnToolTipViewClickedListener;
import de.greenrobot.event.EventBus;
import de.keyboardsurfer.android.widget.crouton.Style;
import eu.inmite.android.lib.dialogs.ISimpleDialogListener;
import eu.inmite.android.lib.dialogs.SimpleDialogFragment;
import fr.castorflex.android.smoothprogressbar.SmoothProgressBar;
public class TrackDetailMapActivity extends BaseActionBarActivity
implements ISimpleDialogListener{
// ------------------------ Constants ------------------------
public static final String EXTRA_TRACK_ID = "extra_track_id";
private static final int SimpleDialogDeleteTrackRequestCode = 1;
private static final int SimpleDialogOpenGpsRequestCode = 2;
// ------------------------- Fields --------------------------
protected long extra_track_id;
protected BaseMapFragment fmMap;
protected TrackCtrlView vTrackCtrl;
protected SmoothProgressBar hProgressBar;
protected TrackDetailDrawerView vDetailDrawer;
protected MultiDirectionSlidingDrawer lyDrawer;
protected ToolTipRelativeLayout lyTooltipframe;
private TextView tvMyLocMode;
protected int crCurTrackLine;
protected int crFinishedTrackLine;
protected int path_width;
protected String strTrackHaveNoPoints;
protected String strSavingAScenery;
protected String strSavingAScenerySuccess;
protected String strSavingASceneryFail;
protected String strExportATrackStart;
protected String strExportATrackSuccess;
protected String strExportATrackFailed;
private Track track;
private List<Scenery> mSenerys;
private List<PathConfig> mPaths;
private boolean isRecordingTrack = false;
/**
* 单个风景点击
*/
private OnClusterItemClickListener<SceneryCluster> onClusterItemClickListener = new OnClusterItemClickListener<SceneryCluster>() {
@Override
public boolean onClusterItemClick(SceneryCluster item) {
// TODO Auto-generated method stub
if(track != null && mSenerys != null){
for(int i = 0, num = mSenerys.size(); i < num ; i++){
if(mSenerys.get(i).getId() == item.getScenery().getId()){
ScenerysActivity.launch(activity, track.getId(), track.getName(), i);
break;
}
}
}
return false;
}
};
/**
* 多个风景重叠点击
*/
private OnClusterClickListener<SceneryCluster> onClusterClickListener = new OnClusterClickListener<SceneryCluster>() {
@Override
public boolean onClusterClick(Cluster<SceneryCluster> cluster) {
// TODO Auto-generated method stub
if(track != null && mSenerys != null){
Scenery top = cluster.getItems().iterator().next().getScenery();
for(int i = 0, num = mSenerys.size(); i < num ; i++){
if(mSenerys.get(i).getId() == top.getId()){
ScenerysActivity.launch(activity, track.getId(), track.getName(), i);
break;
}
}
}
return false;
}
};
private ToolTipView mPauseTipView, mStopTipView, mGetSceneryTipView;
// ----------------------- Constructors ----------------------
// -------- Methods for/from SuperClass/Interfaces -----------
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map_track_detail);
//标题左边返回箭头
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(false);
vTrackCtrl = getViewById(R.id.vTrackCtrl);
hProgressBar = getViewById(R.id.hProgressBar);
vDetailDrawer = getViewById(R.id.vDetailDrawer);
lyDrawer = getViewById(R.id.lyDrawer);
lyTooltipframe = getViewById(R.id.lyTooltipframe);
tvMyLocMode = getViewById(R.id.tvMyLocMode);
extra_track_id = getIntent().getLongExtra(EXTRA_TRACK_ID, 0);
fmMap = (BaseMapFragment) getSupportFragmentManager().findFragmentById(R.id.fmMap);
crCurTrackLine = getResources().getColor(R.color.crCurTrackLine);
crFinishedTrackLine = getResources().getColor(R.color.crFinishedTrackLine);
path_width = getResources().getDimensionPixelSize(R.dimen.path_width);
strTrackHaveNoPoints = getResources().getString(R.string.strTrackHaveNoPoints);
strSavingAScenery = getResources().getString(R.string.strSavingAScenery);
strSavingAScenerySuccess = getResources().getString(R.string.strSavingAScenerySuccess);
strSavingASceneryFail = getResources().getString(R.string.strSavingASceneryFail);
strExportATrackStart = getResources().getString(R.string.strExportATrackStart);
strExportATrackSuccess = getResources().getString(R.string.strExportATrackSuccess);
strExportATrackFailed = getResources().getString(R.string.strExportATrackFailed);
isRecordingTrack = TrackManager.getInstance().isTrackRecording(extra_track_id);
if(isRecordingTrack){
tvMyLocMode.setVisibility(View.VISIBLE);
fmMap.setCanChangeMyLocationType(true);
tvMyLocMode.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
fmMap.changeMyLocationType();
}
});
fmMap.setMyLocationTypeListener(new MyLocationTypeListener() {
@Override
public void myLocationTypeChanged(int type) {
// TODO Auto-generated method stub
if(type == AMap.LOCATION_TYPE_MAP_FOLLOW){
tvMyLocMode.setText(R.string.locationModeFollow);
}else if(type == AMap.LOCATION_TYPE_MAP_ROTATE){
tvMyLocMode.setText(R.string.locationModeRotate);
}else{
tvMyLocMode.setText(R.string.locationModeLocate);
}
}
});
}else{
tvMyLocMode.setVisibility(View.INVISIBLE);
fmMap.setCanChangeMyLocationType(false);
}
viewsInited();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
if(isRecordingTrack){
if(!GpsUtil.isGPSOpen()){
SimpleDialogFragment.createBuilder(this, getSupportFragmentManager())
.setTitle(R.string.dialog_title_gps_not_open_title)
.setMessage(R.string.dialog_title_gps_not_open_msg)
.setPositiveButtonText(R.string.yes)
.setNegativeButtonText(R.string.no)
.setRequestCode(SimpleDialogOpenGpsRequestCode)
.show();
}
}
}
protected void viewsInited(){
if(!EventBus.getDefault().isRegistered(this)){
EventBus.getDefault().register(this);
}
fmMap.setOnSceneryClusterItemClickListener(onClusterItemClickListener);
fmMap.setOnClusterClickListener(onClusterClickListener);
if(isRecordingTrack){
vTrackCtrl.setVisibility(View.VISIBLE);
lyDrawer.setVisibility(View.INVISIBLE);
}else{
vTrackCtrl.setVisibility(View.GONE);
lyDrawer.setVisibility(View.VISIBLE);
lyDrawer.setOnDrawerOpenListener(new OnDrawerOpenListener() {
@Override
public void onDrawerOpened() {
// TODO Auto-generated method stub
lyDrawer.getHandle().setBackgroundResource(R.drawable.ic_map_drawer_down);
}
});
lyDrawer.setOnDrawerCloseListener(new OnDrawerCloseListener() {
@Override
public void onDrawerClosed() {
// TODO Auto-generated method stub
lyDrawer.getHandle().setBackgroundResource(R.drawable.ic_map_drawer_up);
}
});
}
//异步加载轨迹
new CsqBackgroundTask<Track>(this) {
@Override
protected Track onRun() {
// TODO Auto-generated method stub
return TrackDb.getInstance().queryById(extra_track_id);
}
@Override
protected void onResult(Track result) {
// TODO Auto-generated method stub
trackLoaded(result);
}
}.start();
if(isRecordingTrack){
if(!SpUtils.isPauseAndStopRecordToastShowed()){
addPauseTipView();
}
}
}
/**
* @description: 轨迹异步回调函数
* @author: chenshiqiang E-mail:csqwyyx@163.com
* @param track
*/
public void trackLoaded(final Track track){
this.track = track;
if(track == null){
finish();
return;
}
getSupportActionBar().setTitle(track.getName());
if(!isRecordingTrack){
vDetailDrawer.updateTrack(track);
}
//异步加载路线和风景
new CsqBackgroundTask<Void>(this) {
@Override
protected Void onRun() {
// TODO Auto-generated method stub
updatePathAndSceneryTimes++;
if(isRecordingTrack){
mPaths = TrackPointDb.getInstance()
.getCurTrackPointsLatLng(crCurTrackLine, path_width);
mSenerys = SceneryDb.getInstance().getCurScenerys();
if(updatePathAndSceneryTimes == 1){
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
//轨迹居中
MapUtil.centerTrackPoints(fmMap.getMap(),
TrackPointDb.getInstance().getCurTrackPoints());
}
});
}
}else{
final List<TrackPoint> tps = track.getTrackPoints();
track.resetTrackPoints();
mPaths = TrackPointUtil
.getTrackPointsLatLng(tps, crFinishedTrackLine, path_width);
mSenerys = track.getScenerys();
track.resetScenerys();
if(updatePathAndSceneryTimes == 1){
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
//轨迹居中
MapUtil.centerTrackPoints(fmMap.getMap(),
tps);
}
});
}
}
return null;
}
@Override
protected void onResult(Void result) {
// TODO Auto-generated method stub
pathAndSceneryLoaded(result);
}
}.start();
}
private int updatePathAndSceneryTimes = 0;
/**
* @description: 路径和风景异步回调函数
* @author: chenshiqiang E-mail:csqwyyx@163.com
* @param result
*/
public void pathAndSceneryLoaded(Void result){
if(mPaths != null){
fmMap.updatePaths(mPaths);
}
if(mSenerys != null){
new CsqBackgroundTask<Void>() {
List<SceneryCluster> scs = new ArrayList<SceneryCluster>();
protected void onPreExecute() {
showHProgressBar();
};
@Override
protected Void onRun() {
// TODO Auto-generated method stub
SceneryCluster sc = null;
for(Scenery s : mSenerys){
sc = new SceneryCluster(s);
sc.getPicture();
scs.add(sc);
}
return null;
}
protected void onPostExecute(Void t) {
hideHProgressBar();
fmMap.setScenerys(scs);
}
@Override
protected void onResult(Void result) {
// TODO Auto-generated method stub
};
}.start();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
final MediaData media = CaptureMediaUtil.handleActivityResult(this,
requestCode,
resultCode,
data);
if(media != null){
new CsqBackgroundTask<Boolean>(this) {
protected void onPreExecute() {
ToastUtil.showToastInfo(activity,
strSavingAScenery,
Style.INFO,
false);
};
@Override
protected Boolean onRun() {
// TODO Auto-generated method stub
Scenery s = SceneryUtil.newSceneryOfCurTrack(media);
if(s != null){
return SceneryDb.getInstance().addToCurTrack(s) > 0;
}
return false;
}
@Override
protected void onResult(Boolean result) {
// TODO Auto-generated method stub
saveASceneryFinished(result);
}
}.start();
}
}
/**
* @description: 保存一个风景
* @author: chenshiqiang E-mail:csqwyyx@163.com
*/
public void saveASceneryFinished(Boolean success){
String info = null;
if(success){
info = strSavingAScenerySuccess;
}else{
info = strSavingASceneryFail;
}
ToastUtil.showToastInfo(activity,
info,
Style.INFO,
false);
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
if(EventBus.getDefault().isRegistered(this)){
EventBus.getDefault().unregister(this);
}
}
@Override
protected void releaseResources() {
// TODO Auto-generated method stub
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
MenuInflater inflater = getMenuInflater();
if(isRecordingTrack){
inflater.inflate(R.menu.menu_recording_map, menu);
}else{
inflater.inflate(R.menu.menu_track_detail, menu);
}
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
int id;
switch (GlobelConstants.mapType) {
case AMap.MAP_TYPE_NORMAL:
id = R.id.menu_map_type_map;
break;
case AMap.MAP_TYPE_SATELLITE:
id = R.id.menu_map_type_satellite;
break;
case AMap.MAP_TYPE_NIGHT:
id = R.id.menu_map_type_night;
break;
default:
id = R.id.menu_map_type_map;
}
MenuItem menuItem = menu.findItem(id);
if (menuItem != null) {
menuItem.setChecked(true);
}
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case android.R.id.home:
finish();
break;
case R.id.options_item_pic:
if(MyLocationManager.getInstance().getCurrentLocation() != null){
//已经有记录到轨迹点
CaptureMediaUtil.takePicture(activity);
}else{
ToastUtil.showToastInfo(activity,
strTrackHaveNoPoints,
Style.ALERT,
false);
}
break;
case R.id.options_item_video:
if(MyLocationManager.getInstance().getCurrentLocation() != null){
//已经有记录到轨迹点
CaptureMediaUtil.recordVideo(activity);
}else{
ToastUtil.showToastInfo(activity,
strTrackHaveNoPoints,
Style.ALERT,
false);
}
break;
case R.id.options_item_delete:
SimpleDialogFragment.createBuilder(activity, getSupportFragmentManager())
.setTitle(R.string.deleteTrack)
.setMessage(R.string.deleteTrackWarn)
.setPositiveButtonText(R.string.deleteTrackExport)
.setNegativeButtonText(R.string.deleteTrackUnExport)
.setRequestCode(SimpleDialogDeleteTrackRequestCode)
.show();
break;
case R.id.options_item_edit:
EditTrackActivity.launch(activity, extra_track_id);
break;
case R.id.options_item_export:
new CsqBackgroundTask<String>(this) {
protected void onPreExecute() {
showLoadingDialog(strExportATrackStart);
};
protected void onPostExecute(String t) {
hideLoadingDialog();
super.onPostExecute(t);
};
@Override
protected String onRun() {
// TODO Auto-generated method stub
return TrackUtil.zipPack(track);
}
@Override
protected void onResult(String result) {
// TODO Auto-generated method stub
trackExported(result);
}
}.start();
break;
/*case R.id.options_item_share:
break;*/
case R.id.menu_map_type_map:
GlobelConstants.mapType = AMap.MAP_TYPE_NORMAL;
fmMap.getMap().setMapType(AMap.MAP_TYPE_NORMAL);
item.setChecked(true);
break;
case R.id.menu_map_type_satellite:
GlobelConstants.mapType = AMap.MAP_TYPE_SATELLITE;
fmMap.getMap().setMapType(AMap.MAP_TYPE_SATELLITE);
item.setChecked(true);
break;
case R.id.menu_map_type_night:
GlobelConstants.mapType = AMap.MAP_TYPE_NIGHT;
fmMap.getMap().setMapType(AMap.MAP_TYPE_NIGHT);
item.setChecked(true);
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onPositiveButtonClicked(int requestCode) {
// TODO Auto-generated method stub
if(requestCode == SimpleDialogDeleteTrackRequestCode){
new CsqBackgroundTask<String>(this) {
protected void onPreExecute() {
showLoadingDialog(strExportATrackStart);
};
protected void onPostExecute(String t) {
hideLoadingDialog();
super.onPostExecute(t);
};
@Override
protected String onRun() {
// TODO Auto-generated method stub
return TrackUtil.zipPack(track);
}
@Override
protected void onResult(String result) {
// TODO Auto-generated method stub
trackExportedThenDelete(result);
}
}.start();
}else if(requestCode == TrackCtrlView.requestCodeStopTrack){
vTrackCtrl.stopTrack();
}else if(requestCode == SimpleDialogOpenGpsRequestCode){
startActivity(GpsUtil.getLocationSetingIntent());
}
}
@Override
public void onNegativeButtonClicked(int requestCode) {
// TODO Auto-generated method stub
if(requestCode == SimpleDialogDeleteTrackRequestCode){
TrackDb.getInstance().delete(extra_track_id);
finish();
}
}
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
if(lyDrawer.isOpened()){
lyDrawer.close();
return;
}
super.onBackPressed();
}
// --------------------- Methods public ----------------------
public static void launch(Context context , long trackId){
Intent i = new Intent(context, TrackDetailMapActivity.class);
i.putExtra(EXTRA_TRACK_ID, trackId);
context.startActivity(i);
}
public void showHProgressBar() {
if(hProgressBar != null){
hProgressBar.setVisibility(View.VISIBLE);
hProgressBar.progressiveStart();
}
}
public void hideHProgressBar() {
if(hProgressBar != null){
hProgressBar.setVisibility(View.INVISIBLE);
hProgressBar.progressiveStop();
}
}
// --------------------- Methods private ---------------------
public void onEventMainThread(EventCurTrackStatusChanged event){
if(isRecordingTrack){
if(event.track.getRecordStatus() == RecordStatus.finished.getValue()){
finish();
if(isRecordingTrack
&& TrackDb.getInstance().queryById(extra_track_id) != null){
//当前轨迹停止且没删除时退出,编辑
EditTrackActivity.launch(activity, extra_track_id);
}
}
}
}
public void onEventMainThread(EventNewTrackPoint event){
if(isRecordingTrack){
fmMap.updatePaths(TrackPointDb.getInstance()
.getCurTrackPointsLatLng(crCurTrackLine, path_width));
}
}
public void onEventMainThread(EventNewScenery event){
if(isRecordingTrack){
fmMap.addScenery(new SceneryCluster(event.scenery));
}
}
public void onEventMainThread(EventTrackUpdated event){
trackLoaded(event.track);
}
public void onEventMainThread(EventSceneryNumChanged event){
//异步加载风景
/* 因为风景改变会导致轨迹改变EventTrackUpdated,会刷新风景数
* new CsqBackgroundTask<Void>(this , "pathAndSceneryLoaded") {
@Override
protected Void onRun() {
// TODO Auto-generated method stub
mSenerys = track.getScenerys();
track.resetScenerys();
return null;
}
}.start();*/
}
public void trackExported(String zipPath){
if(TextUtils.isEmpty(zipPath)){
ToastUtil.showToastInfo(activity,
strExportATrackFailed,
Style.ALERT,
false);
}else{
ToastUtil.showToastInfo(activity,
strExportATrackSuccess,
Style.INFO,
false);
}
}
public void trackExportedThenDelete(String zipPath){
if(TextUtils.isEmpty(zipPath)){
ToastUtil.showToastInfo(activity,
strExportATrackFailed,
Style.ALERT,
false);
}else{
ToastUtil.showToastInfo(activity,
strExportATrackSuccess,
Style.INFO,
false);
TrackDb.getInstance().delete(extra_track_id);
finish();
}
}
private void addPauseTipView() {
String strHelpTipPauseRecord = getResources().getString(R.string.strHelpTipPauseRecord);
ToolTip toolTip = new ToolTip().withText(strHelpTipPauseRecord)
.withColor(getResources().getColor(R.color.yellow10))
.withTextColor(getResources().getColor(R.color.purple13))
.withAnimationType(ToolTip.AnimationType.FROM_TOP);
View btnPause = findViewById(R.id.btnStart);
if(btnPause != null && lyTooltipframe != null){
mPauseTipView = lyTooltipframe.showToolTipForView(toolTip, btnPause);
mPauseTipView.setOnToolTipViewClickedListener(new OnToolTipViewClickedListener() {
@Override
public void onToolTipViewClicked(ToolTipView toolTipView) {
// TODO Auto-generated method stub
mPauseTipView = null;
}
});
//6秒后隐藏
btnPause.postDelayed(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
removeStartTipView();
}
}, 6000);
//2秒后显示停止提示
btnPause.postDelayed(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
addStopTipView();
}
}, 2000);
}
}
private void removeStartTipView() {
if(mPauseTipView != null){
mPauseTipView.remove();
mPauseTipView = null;
}
}
private void addStopTipView() {
String strHelpTipStopRecord = getResources().getString(R.string.strHelpTipStopRecord);
ToolTip toolTip = new ToolTip().withText(strHelpTipStopRecord)
.withColor(getResources().getColor(R.color.red10))
.withTextColor(getResources().getColor(R.color.green))
.withAnimationType(ToolTip.AnimationType.FROM_TOP);
View btnStop = findViewById(R.id.btnStop);
if(btnStop != null && lyTooltipframe != null){
mStopTipView = lyTooltipframe.showToolTipForView(toolTip, btnStop);
mStopTipView.setOnToolTipViewClickedListener(new OnToolTipViewClickedListener() {
@Override
public void onToolTipViewClicked(ToolTipView toolTipView) {
// TODO Auto-generated method stub
mStopTipView = null;
}
});
//6秒后隐藏,并显示拍照提示
btnStop.postDelayed(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
removeStopTipView();
addGetSceneryTipView();
}
}, 6000);
}
}
private void removeStopTipView() {
if(mStopTipView != null){
mStopTipView.remove();
mStopTipView = null;
}
}
private void addGetSceneryTipView() {
String strHelpTipGetScenery = getResources().getString(R.string.strHelpTipGetScenery);
ToolTip toolTip = new ToolTip().withText(strHelpTipGetScenery)
.withColor(getResources().getColor(R.color.red10))
.withTextColor(getResources().getColor(R.color.green))
.withAnimationType(ToolTip.AnimationType.FROM_MASTER_VIEW);
View vGetScenery = findViewById(R.id.vGetScenery);
if(vGetScenery != null && lyTooltipframe != null){
mGetSceneryTipView = lyTooltipframe.showToolTipForView(toolTip, vGetScenery);
mGetSceneryTipView.setOnToolTipViewClickedListener(new OnToolTipViewClickedListener() {
@Override
public void onToolTipViewClicked(ToolTipView toolTipView) {
// TODO Auto-generated method stub
mGetSceneryTipView = null;
}
});
//6秒后隐藏
vGetScenery.postDelayed(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
removeGetSceneryTipView();
}
}, 6000);
}
}
private void removeGetSceneryTipView() {
if(mGetSceneryTipView != null){
mGetSceneryTipView.remove();
mGetSceneryTipView = null;
}
}
// --------------------- Getter & Setter ---------------------
// --------------- Inner and Anonymous Classes ---------------
}