1、这次自己实现的是在地图进行运动轨迹的同时。得到运动的总距离。对于时间也可以获取到。但是速度方面有一点欠缺。还需要改进和增强。明天准备获取得到运动的每一部分的具体时间,得到速度。舒适速度和平均速度。今天变更的代码操作如下图所示;
public String getDistance(LatLng start,LatLng end){ double lat1 = (Math.PI/180)*start.latitude; double lat2 = (Math.PI/180)*end.latitude; double lon1 = (Math.PI/180)*start.longitude; double lon2 = (Math.PI/180)*end.longitude; Toast.makeText(DynamicDemo.this,String.valueOf(lat1), Toast.LENGTH_SHORT).show(); Toast.makeText(DynamicDemo.this,String.valueOf(lon1), Toast.LENGTH_SHORT).show(); Toast.makeText(DynamicDemo.this,String.valueOf(lat2), Toast.LENGTH_SHORT).show(); Toast.makeText(DynamicDemo.this,String.valueOf(lon2), Toast.LENGTH_SHORT).show(); //地球半径 double R = 6371; //两点间距离 km,如果想要米的话,结果*1000 double d = Math.acos(Math.sin(lat1)*Math.sin(lat2)+Math.cos(lat1)*Math.cos(lat2)*Math.cos(lon2-lon1))*R; if(d<1) return (int)d*1000+"m"; else return String.format("%.2f",d)+"km"; }
2、今天完成了APP首页的设计,并且获取到登录者的信息,让其显示在用户基础信息的位置,包括头像和用户名。还有就是对闹钟功能的基本设计及思路,完成了添加闹钟的界面设计,明天再继续完成详细功能。下面是主要代码和截图
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.home); muserOperator = new UserOperator(this); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); drawer.addDrawerListener(toggle); toggle.syncState(); NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); navigationView.setNavigationItemSelectedListener(this); // LayoutInflater layoutInflater = this.getLayoutInflater(); // view =layoutInflater.inflate(R.layout.home_header,null); // imageView=(ImageView)view.findViewById(R.id.userimageView); // textView=(TextView) view.findViewById(R.id.usernameView); Intent intent = getIntent();//获取Intent对象 String username = intent.getStringExtra("username"); textView=navigationView.getHeaderView(0).findViewById(R.id.usernameView); imageView=navigationView.getHeaderView(0).findViewById(R.id.userimageView); User bean = muserOperator.isExit(username); String userpicture = bean.userpicture; //Log.d("volley", userpicture); textView.setText(username); Bitmap bitmap= BitmapFactory.decodeFile(userpicture); imageView.setImageBitmap(bitmap); fm = this.getSupportFragmentManager(); switchFragment("首页"); }
3.今天继续昨天的内容,完成了音乐适配器的相关代码,增加了SD卡音乐信息的读取的学习和代码书写。并成功读取手机SD里面的歌曲信息。明天准备完成手机SD音乐的播放。
package com.example.keeprunning6; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import java.util.ArrayList; public class LocalMusicAdapter extends BaseAdapter { private Context context; private LayoutInflater inflater; private ArrayList<LocalMusicBean>list; public LocalMusicAdapter(Context context,ArrayList<LocalMusicBean>list){ this.context=context; this.list=list; this.inflater=LayoutInflater.from(context); } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } static class ViewHolder{ public TextView music_num,music_song,music_singer,music_album,music_durtion; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = null; if (convertView == null) { convertView = inflater.inflate(R.layout.item_local_music, null); viewHolder = new ViewHolder(); viewHolder.music_num = convertView.findViewById(R.id.item_local_music_num); viewHolder.music_song=convertView.findViewById(R.id.item_local_music_song); viewHolder.music_singer=convertView.findViewById(R.id.item_local_music_singer); viewHolder.music_album=convertView.findViewById(R.id.item_local_music_album); viewHolder.music_durtion=convertView.findViewById(R.id.item_local_music_durtion); convertView.setTag(viewHolder); }else{ viewHolder=(ViewHolder)convertView.getTag(); } LocalMusicBean bean=list.get(position); viewHolder.music_num.setText((position+1)+""); viewHolder.music_song.setText(bean.getSong()); viewHolder.music_singer.setText(bean.getSinger()); viewHolder.music_album.setText(bean.getAlbum()); viewHolder.music_durtion.setText(bean.getDuration()); return convertView; } }
package com.example.keeprunning6; import android.Manifest; import android.content.ContentResolver; import android.content.pm.PackageManager; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; public class MainActivity extends AppCompatActivity { //音乐列表试图 private ListView listView; //音乐列表 private ArrayList<LocalMusicBean> list=new ArrayList<>(); //当前播放的音乐以及歌手 private TextView now_music_song,now_music_singer,now_music_duration,now_music_ablum; private LocalMusicAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView=findViewById(R.id.music_list); now_music_song=findViewById(R.id.local_music_botton_tv_song); now_music_singer=findViewById(R.id.item_local_music_singer); //自定义数据 adapter=new LocalMusicAdapter(MainActivity.this,list); listView.setAdapter(adapter); //加载本地数据源 localMusicData(); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //上面的position参数是歌曲在列表中的索引 //播放选中的音乐 //切换下方当前音乐信息 now_music_song.setText(list.get(position).getSong()); now_music_singer.setText(list.get(position).getSinger()); } }); } private void localMusicData(){ //加载本地存储当中的音乐mp3文件到集合当中 //1.获取ContentResolver对象 ContentResolver resolver=getContentResolver(); //2.获取本地音乐存储的Uri地址 Uri uri= MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; //3.开始查询地址 Cursor cursor=resolver.query(uri,null,null,null,null); //4.遍历Cursor int id=0; while(cursor.moveToNext()){ String song=cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE)); String singer=cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST)); String album=cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM)); id++; //歌曲编号变成String类型 String sid=String.valueOf(id); String path=cursor.getString(cursor.getColumnIndex((MediaStore.Audio.Media.DATA))); // String duration=cursor.getString(cursor.getColumnIndex((MediaStore.Audio.Media.DURATION))); int duration=cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION)); SimpleDateFormat sdf=new SimpleDateFormat("mm:ss"); String time = formatTime(duration); //将一行当中的数据封装到对象当中 LocalMusicBean bean=new LocalMusicBean(sid,song,singer,album,time,path); list.add(bean); } //数据变化,提示适配器更新 adapter.notifyDataSetChanged(); } // 转换歌曲时间的格式 public static String formatTime(int time) { if (time / 1000 % 60 < 10) { String tt = time / 1000 / 60 + ":0" + time / 1000 % 60; return tt; } else { String tt = time / 1000 / 60 + ":" + time / 1000 % 60; return tt; } } }