1.布局文件activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="测量地球上任意两点之间的距离"
android:textSize="21sp" />
<TextView
android:id="@+id/tv1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/tv"
android:layout_marginTop="20dp"
android:text="起点的纬度"
android:textSize="18sp" />
<EditText
android:id="@+id/et1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/tv1"
android:layout_below="@id/tv"
android:layout_toRightOf="@id/tv1"
android:hint="请输入起点的纬度"
android:inputType="numberDecimal" />
<TextView
android:id="@+id/tv2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/tv1"
android:layout_marginTop="20dp"
android:text="起点的经度"
android:textSize="18sp" />
<EditText
android:id="@+id/et2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/tv2"
android:layout_below="@id/et1"
android:layout_toRightOf="@id/tv2"
android:hint="请输入起点的经度"
android:inputType="numberDecimal" />
<TextView
android:id="@+id/tv3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/tv2"
android:layout_marginTop="20dp"
android:text="终点的纬度"
android:textSize="18sp" />
<EditText
android:id="@+id/et3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/tv3"
android:layout_below="@id/et2"
android:layout_toRightOf="@id/tv3"
android:hint="请输入终点的纬度"
android:inputType="numberDecimal" />
<TextView
android:id="@+id/tv4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/tv3"
android:layout_marginTop="20dp"
android:text="终点的经度"
android:textSize="18sp" />
<EditText
android:id="@+id/et4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/tv4"
android:layout_below="@id/et3"
android:layout_toRightOf="@id/tv4"
android:hint="请输入终点的经度"
android:inputType="numberDecimal" />
<TextView
android:id="@+id/tv5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/tv4"
android:layout_marginTop="20dp"
android:text="两点之间的距离"
android:textSize="18sp" />
<EditText
android:id="@+id/et5"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/tv5"
android:layout_below="@id/et4"
android:layout_toRightOf="@id/tv5" />
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/tv5"
android:text="确定" />
</RelativeLayout>
2.逻辑代码部分
package xss.gps3;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.location.Location;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends Activity {
private EditText et1, et2, et3, et4, et5;
double d1, d2, d3, d4;
final float[] results = new float[3];// 保存返回结果
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et1 = (EditText) findViewById(R.id.et1);
et2 = (EditText) findViewById(R.id.et2);
et3 = (EditText) findViewById(R.id.et3);
et4 = (EditText) findViewById(R.id.et4);
et5 = (EditText) findViewById(R.id.et5);
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
try {
d1 = Double.parseDouble(et1.getText().toString());
d2 = Double.parseDouble(et2.getText().toString());
d3 = Double.parseDouble(et3.getText().toString());
d4 = Double.parseDouble(et4.getText().toString());
} catch (NumberFormatException e) {
// TODO: handle exception
e.printStackTrace();
}
// 计算两点之间的距离(单位:米)
// 前两个参数表示起点的经度和纬度,中间两个参数表示终点的经度和纬度
// 最后一个参数表示用于返回结果,数组的第一个之就是返回的距离
Location.distanceBetween(d1, d2, d3, d4, results);
// final float bearing = results[1];
et5.setText(String.valueOf(results[0]) + "m");
}
});
}
//捕捉屏幕的返回键
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK) {
//按下返回键的时候执行下面的函数
showDialog();
}
return true;
}
//提示对话框函数 是否退出当前的应用
public void showDialog() {
AlertDialog.Builder aBuilder = new AlertDialog.Builder(this);
aBuilder.setTitle("Warm Prompt!");
aBuilder.setMessage("Whether out of the current application?");
aBuilder.setIcon(R.drawable.ic_launcher);
aBuilder.setPositiveButton("ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
MainActivity.this.finish();
}
});
aBuilder.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
});
aBuilder.create().show();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
说明:本代码肯能不是最优的代码,欢迎读者留言