这个是我今年参加谷歌安卓大赛的作品,结果连我的名字都没有,伤心啊。不过我已经决定在Android上狠下功夫的,这可是个好东西。

先看我的截屏吧。

还有个城市选择界面:

下面是代码了,除了计算公式是找来的外,其他全部都是原创,那可是我的十一八天长假的劳动成果啊。

package lineter.works.sunangle;import java.util.Calendar;public class city {private double weidu, jingdu;private double pianjiao, yangjiao;public boolean weidu_cuowu = false;public boolean jingdu_cuowu = false;public city(double weidu, double jingdu) {if (weidu <= 90.0 && weidu >= -90.0 ){this.weidu = weidu;}else{weidu_cuowu=true;}if(jingdu <= 180.0&& jingdu > -180.0) {this.jingdu = jingdu;}else{jingdu_cuowu=true;}if(!weidu_cuowu && !jingdu_cuowu){this.jisuan();} else {this.pianjiao = 0.0;this.yangjiao = 0.0;}}public String getpianjiao() {String temp1, temp2, temp3;temp1 = String.valueOf((int) (this.pianjiao));temp2 = String.valueOf(Math.abs((int) ((this.pianjiao - (double) (int) (this.pianjiao)) * 60)));if (Integer.parseInt(temp2) < 10)temp2 = "0" + temp2;temp3 = String.valueOf(Math.abs((int) (((this.pianjiao - (double) (int) (this.pianjiao)) * 60 - (double) (int) ((this.pianjiao - (double) (int) (this.pianjiao)) * 60)) * 60)));if (Integer.parseInt(temp3) < 10)temp3 = "0" + temp3;return String.valueOf(temp1 + "°" + temp2 + "'" + temp3 + "\"");}public String getyangjiao() {String temp1, temp2, temp3;temp1 = String.valueOf((int) (this.yangjiao));temp2 = String.valueOf(Math.abs((int) ((this.yangjiao - (double) (int) (this.yangjiao)) * 60)));if (Integer.parseInt(temp2) < 10)temp2 = "0" + temp2;temp3 = String.valueOf(Math.abs((int) (((this.yangjiao - (double) (int) (this.yangjiao)) * 60 - (double) (int) ((this.yangjiao - (double) (int) (this.yangjiao)) * 60)) * 60)));if (Integer.parseInt(temp3) < 10)temp3 = "0" + temp3;return String.valueOf(temp1 + "°" + temp2 + "'" + temp3 + "\"");}private void jisuan() {double temp1, temp2, temp3, temp4, temp5, temp6;double chiwei, shicha;Calendar d = Calendar.getInstance();temp1 = (double) d.get(Calendar.DAY_OF_YEAR);temp2 = 79.6764 + 0.2422 * ((double) d.get(Calendar.YEAR) - 1985)- (double) ((d.get(Calendar.YEAR) - 1985) / 4);temp3 = 2 * Math.PI * (temp1 - temp2) / (365.2422);chiwei = 0.3723 + 23.2567 * Math.sin(temp3) + 0.1149* Math.sin(2 * temp3) - 0.1712 * Math.sin(3 * temp3) - 0.758* Math.cos(temp3) + 0.3656 * Math.cos(2 * temp3) + 0.0201* Math.cos(3 * temp3);shicha = 0.0028 - 1.9857 * Math.sin(temp3) + 9.9059* Math.sin(2 * temp3) - 7.0924 * Math.cos(temp3) - 0.6882* Math.cos(2 * temp3);temp4 = (double) d.get(Calendar.HOUR_OF_DAY)+ ((double) d.get(Calendar.MINUTE)) / 60+ ((double) d.get(Calendar.SECOND)) / 3600;temp4 = temp4 + (this.jingdu - 120.0) * 4 / 60 + shicha / 60;temp5 = Math.sin(this.weidu * Math.PI / 180)* Math.sin(chiwei * Math.PI / 180)+ Math.cos(this.weidu * Math.PI / 180)* Math.cos(chiwei * Math.PI / 180)* Math.cos((temp4 - 12) * 15 * Math.PI / 180);yangjiao = Math.asin(temp5) * 180 / Math.PI;temp6 = (Math.sin(yangjiao * Math.PI / 180)* Math.sin(this.weidu * Math.PI / 180) - Math.sin(chiwei* Math.PI / 180))/ (Math.cos(yangjiao * Math.PI / 180) * Math.cos(this.weidu* Math.PI / 180));pianjiao = Math.acos(temp6) * 180 / Math.PI;if (temp4 < 12.0) {pianjiao = -pianjiao;}}}

这个是主程序了,

sunangle.java:

package lineter.works.sunangle;import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;public class sunangle extends Activity {public static final String ALL_DATE="POSITION";private EditText etweidu, etjingdu;private Button bcalc, bhelp, bquit;private TextView tvpianjiao, tvyangjiao;final Handler handler = new Handler();private List<String> list=new ArrayList<String>();private ArrayAdapter<String> adapter;private Spinner sp;private Boolean firstchoice=true;private int citychoic;private String[] city_name={"北京","天津","石家庄","保定","唐山","秦皇岛","张家口","承德","太原","大同","临汾","长治", //12"呼和浩特","包头","海拉尔","沈阳","大连","鞍山","锦州","长春","吉林","哈尔滨","齐齐哈尔","牡丹江","上海",  //13"南京","无锡","苏州","徐州","杭州","宁波","温州","金华","合肥","芜湖","安庆","福州","厦门", "泉州","南昌",  //15"九江","赣州","济南","烟台","青岛","郑州","开封","洛阳","许昌","新乡","武汉","宜昌","沙市","长沙","衡阳",   //15"湘潭","常德","广州","汕头","韶关","海口","南宁","桂林","柳州","悟州","成都","重庆","内江","泸州","万县",   //15"贵阳","遵义","昆明","拉萨","日喀则","西安","宝鸡","延安","兰州","天水","酒泉","西宁","银川","乌鲁木齐",   //14"哈密","喀什","和田","台北"};                                                                           //4private double[] city_longitude={116.467,117.167,114.600,115.467,118.150,119.617,114.917,117.867,112.550,113.217,111.217,113.217,   //12111.633,110.000,119.717,123.383,121.633,123.000,121.150,125.300,126.600,126.633,123.917,129.600,121.433,                        //13118.767,120.300,120.650,117.200,120.167,121.567,120.633,119.817,117.267,118.333,117.033,119.317,118.067,118.617,115.883,        //15115.983,114.933,117.033,121.333,120.317,113.700,114.383,112.433,113.800,113.900,114.333,111.250,112.283,112.917,112.567,        //15112.850,111.650,113.300,116.667,113.550,110.167,108.350,110.167,109.317,111.300,104.067,106.550,105.050,105.450,108.367,        //15106.717,106.883,102.700,91.033,88.817,108.917,107.150,109.433,103.833,105.550,98.500,101.817,106.216,87.600,                    //1493.450,75.983,79.917,121.517};                                                                                              //4private double[] city_dimensionality={39.900,39.167,38.050,38.883,39.617,39.900,40.850,40.983,37.850,40.117,36.083,36.083,      //1240.800,40.583,49.233,41.800,38.900,41.067,41.150,43.917,43.800,45.750,47.367,44.583,31.200,                             //1332.050,31.583,31.333,34.267,30.250,29.883,28.000,29.167,31.850,31.350,30.533,26.033,24.433,24.900,28.683,               //1529.717,25.850,36.667,37.550,36.067,34.733,34.867,34.717,34.000,35.300,30.617,30.700,30.267,28.200,26.917,               //1527.900,29.000,23.167,23.350,24.800,20.050,22.783,25.300,24.333,23.467,30.650,29.550,29.583,28.900,30.800,               //1526.567,27.750,25.050,29.650,29.267,34.250,34.350,36.583,36.050,34.583,39.733,36.617,38.467,43.767,                      //1442.833,39.450,37.117,25.033};                                                                                           //4/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setTitle("太阳角度计算工具");setContentView(R.layout.main);etweidu = (EditText) findViewById(R.id.weidu);etjingdu = (EditText) findViewById(R.id.jingdu);bcalc = (Button) findViewById(R.id.bcalc);bcalc.setOnClickListener(new ClickListener());bhelp = (Button) findViewById(R.id.bhelp);bhelp.setOnClickListener(new ClickListener());bquit = (Button) findViewById(R.id.bquit);bquit.setOnClickListener(new ClickListener());tvpianjiao = (TextView) findViewById(R.id.pianjiao);tvyangjiao = (TextView) findViewById(R.id.yangjiao);handler.postDelayed(runnable, 1000);int tmp;for (tmp=0;tmp<city_name.length;tmp++){list.add(city_name[tmp].toString());}sp = (Spinner) findViewById(R.layout.myspinner);adapter=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,list);adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);sp.setAdapter(adapter);sp.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){@Overridepublic void onItemSelected(AdapterView<?> arg0, View arg1,int arg2, long arg3) {// TODO Auto-generated method stubif(firstchoice){firstchoice=false;}else{etjingdu.setText(String.valueOf( city_longitude[arg2]));etweidu.setText(String.valueOf( city_dimensionality[arg2]));citychoic=arg2;}arg0.setVisibility(View.VISIBLE);}@Overridepublic void onNothingSelected(AdapterView<?> arg0) {// TODO Auto-generated method stub}});SharedPreferences position1=getSharedPreferences(ALL_DATE,0);String lastWeidu=position1.getString("LAST_WEIDU", "38.497");String lastJingdu=position1.getString("LAST_JINGDU", "106.133");citychoic=position1.getInt("CITYCHOIC", 0);etweidu.setText(lastWeidu.toString());etjingdu.setText(lastJingdu.toString());sp.setSelection(citychoic);}@Overrideprotected void onStop() {// TODO Auto-generated method stubsuper.onStop();SharedPreferences.Editor sharedata = getSharedPreferences(ALL_DATE, 0).edit(); sharedata.putString("LAST_WEIDU",etweidu.getText().toString());  sharedata.putString("LAST_JINGDU",etjingdu.getText().toString()); sharedata.putInt("CITYCHOIC", citychoic); sharedata.commit();}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();handler.removeCallbacks(runnable);}class ClickListener implements View.OnClickListener {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubif (arg0 == bcalc) {city ct = new city(Double.parseDouble(etweidu.getText().toString()), Double.parseDouble(etjingdu.getText().toString()));tvpianjiao.setText(ct.getpianjiao());tvyangjiao.setText(ct.getyangjiao());} else if (arg0 == bhelp) {new AlertDialog.Builder(sunangle.this).setTitle("使用帮助").setMessage("请选择城市或输入当地经纬度计算当前时刻太阳角度。\n"+ "说明:\n  “偏角”以正南方向为0度,东负西正。\n"+ "  “仰角”以地平面为0度,上正下负。".toString()).show();} else if (arg0 == bquit) {finish();}}}Runnable runnable = new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubtry {double tmp1, tmp2;if (etweidu.getText().toString() != ""&& etjingdu.getText().toString() != "") {tmp1 = Double.parseDouble(etweidu.getText().toString());tmp2 = Double.parseDouble(etjingdu.getText().toString());city ct = new city(tmp1, tmp2);tvpianjiao.setText(ct.getpianjiao());tvyangjiao.setText(ct.getyangjiao());if (ct.weidu_cuowu) {tvpianjiao.setText("维度输入错误");}if(ct.jingdu_cuowu){tvyangjiao.setText("经度输入错误");}handler.postDelayed(this, 1000);}} catch (Exception e) {handler.postDelayed(runnable, 1000);}}};
}

看看代码就知道我是怎么费了九牛二虎之力才做出来的了吧,唉,重在参与吧。

不好意思,少上传个布局文件。

main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width="fill_parent"android:layout_height="fill_parent" android:background="@drawable/taiyang" ><TableLayout android:layout_width="fill_parent"android:stretchColumns="0,1"android:layout_height="fill_parent"android:padding="10dp"><TableRow><TextViewandroid:text="请选择城市"android:textSize="18dp" /><Spinner android:id="@+layout/myspinner" android:layout_width="wrap_content"android:layout_height="wrap_content"/></TableRow><TableRow><TextViewandroid:text="当地维度(°)"android:textSize="18dp" /><EditText android:id="@+id/weidu"android:text="38.16" android:numeric="decimal"/></TableRow><TableRow><TextView android:text="当地经度(°)"android:textSize="18dp" /><EditText android:id="@+id/jingdu"android:text="106.1" android:numeric="decimal"/></TableRow><TableRow><TextViewandroid:text="太阳偏角"android:textSize="18dp"/><TextViewandroid:id="@+id/pianjiao"android:text="0.0"android:textSize="18dp"android:textColor="#4754f8"/></TableRow><TableRow><TextViewandroid:text="太阳仰角"android:textSize="18dp"/><TextViewandroid:id="@+id/yangjiao"android:text="0.0"android:textSize="18dp"android:textColor="#4754f8"/></TableRow><TableRow><TextViewandroid:text="当前时间"android:textSize="22dp"/><DigitalClock android:text="DigitalClock" android:id="@+id/digitalClock1" android:layout_width="wrap_content" android:layout_height="wrap_content"android:textSize="22dp"android:textColor="#0ff"/></TableRow><TableRow><Buttonandroid:id="@+id/bhelp"android:text="帮助"android:layout_width="wrap_content" /><Buttonandroid:id="@+id/bquit"android:text="退出系统"android:layout_width="wrap_content" /></TableRow><Button android:id="@+id/bcalc"android:text="计算角度"android:layout_width="wrap_content" android:visibility="invisible"/></TableLayout>
</LinearLayout>

字符串文件

string.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources><string name="hello">Hello World, sunangle!</string><string name="app_name">sunangle</string><string name="helpmsg">使用帮助。</string>
</resources>

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="lineter.works.sunangle" android:versionCode="1"android:versionName="1.0"><uses-sdk android:minSdkVersion="4" /><application android:icon="@drawable/sunangle"android:label="@string/app_name" android:launchMode="singleInstance"><activity android:name=".sunangle" android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application>
</manifest>

其实也没什么权限,它也不需要什么权限,只是有个单例运行设置,在第八行,注意下就行了。

基于Android的太阳方位角计算工具相关推荐

  1. html动态日出,日出日落及方位角计算html

    太阳高度角的计算-太阳高度角在线计算器-太阳方位角计算软件 // sunangle.js var showedLongitudeMeridianWarning = false; //console.l ...

  2. android日记本功能界面图片,基于android的日记本的设计和开发.ppt

    基于android的日记本的设计和开发 基于android的日记本的设计与开发 指导教师:闫宇帅 答辩人:廉若榕 毕业答辩 2014年5月18日 背景 手机的发展给人们的生活带来了极大的便利.以往,我 ...

  3. android 微积分计算器,高数计算器1.0(高数计算工具app)

    高数计算器1.0是手机上的一款免费好用的高数计算工具app,利用它,用户就可以进行快速进准的高等数学计算操作,范围包涵函数偏导.泰勒展开.一重积分.二重积分以及Latex编辑等等.详细内容请感兴趣的朋 ...

  4. 基于Java Swing编写的简易运费计算工具

    两年前给媳妇儿做的一个基于Java Swing编写的简易运费计算工具,现开源,关键是思路(https://github.com/honghailiang/FreightSystem).主要有两个部分实 ...

  5. 卡路里计算JAVA_pedometer 这是一个基于android平台的软件,用于计算你走路的步数,算出消耗的卡路里,以达到健 238万源代码下载...

    详细说明:这是一个基于android平台的软件,用于计算你走路的步数,算出消耗的卡路里,以达到健康的管理.-This is an android platform based software, us ...

  6. 基于GIS的建筑物褶皱度计算工具及计算实例经验分享

    目录 一.工具介绍 1.工具界面 2.计算结果示例 3.计算原理 二.数据准备 三.计算步骤 1.生成渔网 2.工具计算 3.计算结果 4.计算结果(马赛克) 一.工具介绍 利用C#语言,基于ArcG ...

  7. 基于GIS的建筑物群高度变化程度计算工具及计算实例经验分享

    目录 一.工具介绍 1.工具界面 2.计算结果示例 3.计算原理 二.数据准备 三.计算步骤 1.生成渔网 2.工具计算 3.计算结果 4.计算结果(马赛克) 一.工具介绍 利用C#语言,基于ArcG ...

  8. Android平台根据分辨率计算屏幕尺寸,基于物理尺寸来验证手机和平板应用合并的可行性

    Android平台根据分辨率计算屏幕尺寸,基于物理尺寸来验证手机和平板应用合并的可行性   出发点:Android系统本身是支持多种分辨率的,如图1所示,一般情况下要适配不同尺寸的设备只需要做两件事, ...

  9. android日程管理开发,基于Android日程管理工具的设计与开发.doc

    PAGE PAGE i 基于android日程管理工具的设计与开发 摘 要 随着移动平台的崛起,越来越多的传统PC软件被移植到移动平台,比如ipad,iphone,Android等智能终端设备,在这些 ...

  10. 基于Android日程管理工具的设计与开发

    一.选题依据及研究综述 1.1 选题的背景与意义         随着社会的不断发展,人们的生活逐渐变得繁琐,每天需要处理的事情变得越来越多.越来越多的人逐渐意识到自己的记忆力不足以记下自己所有的行程 ...

最新文章

  1. Go 学习笔记(5)— 算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、取地址和指针运算符
  2. 人工智能进军餐饮:AI调酒,越喝越有
  3. 厚积薄发的90后:读博前三年零文章,后期发力产出11篇一作,现任985高校博导...
  4. 为什么你用matplotlib savefig保存下来的图像是一个空白图片?
  5. 线代总结2 矩阵代数
  6. 速神经网络的训练算法LARS/LAMB工作原理 --UC Berkeley在读博士生尤洋
  7. 使用Xftp实现Windows与Linux服务器实现快速传输文件
  8. Jupyter Notebook的15个技巧和窍门,可简化您的编码体验
  9. 在Linux中的子进程是什么,什么父进程的东西在Linux中新创建的子进程中共享
  10. vue中supermap iserver绘制使用的插件安装
  11. 乌班图配置mysql Java_从零开始的告警平台(1)
  12. Oracle 拼接结果过长,ora-01489 字符串连接的结果过长 解决方案
  13. Notepad++安装NppFTP插件
  14. Installshield2008教程
  15. arctan查表法_DSP正弦波——查表法原理
  16. 如何拥有类似 hi@hahah.fun 的个人专属域名的邮箱
  17. 如何管理公司的共享iPad?
  18. 计算机内存条只认了一个,怎么解决Win10插入2个4G内存条却只显示4G?
  19. POI excel 单元格换行
  20. java 限制输入两位数_Java 控制数字输入、控制输入长度的方法 | 学步园

热门文章

  1. php正则判断是否为图片格式,JS 获取文件后缀,判断文件类型(比如是否为图片格式)...
  2. 匿名访问ftp服务器
  3. Win10专业版永久激活
  4. [含lw+源码等]微信小程序在线考试管理系统+后台管理系统[包运行成功]
  5. linux输入法图标不见了,桌面上右下角的输入法图标不见了 怎么找回?
  6. 有关公司的各个部门英文缩写简称
  7. 如何把桌面计算机和回收站隐藏,对!回收站图标没了,教你怎么隐藏回收站保护个人隐私...
  8. Latex 箭头、下标、符号上下写文字、正方形和三角形
  9. python实现多表合并_python实现excel多表合并的方法
  10. 模拟退火算法应用(Java)