实例介绍
【实例简介】仅仿了UI无业务逻辑实现
【实例截图】
【核心代码】
package com.anjoyo.wangyan.activity; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.app.ProgressDialog; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.util.Log; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.view.animation.LinearInterpolator; import android.view.animation.RotateAnimation; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.RelativeLayout; import android.widget.ScrollView; import android.widget.TextView; import android.widget.ToggleButton; import com.anjoyo.wangyan.adapter.OnlineListAdapter; import com.anjoyo.wangyan.constant.PlayerFinal; import com.anjoyo.wangyan.customview.MyHSV; import com.anjoyo.wangyan.db.MusicDBHelper; import com.anjoyo.wangyan.download.LrcDownThread; import com.anjoyo.wangyan.download.ThreadPoolUtilsImg; import com.anjoyo.wangyan.entity.MusicInfo; import com.anjoyo.wangyan.service.OnPlayerStateChangeListener; import com.anjoyo.wangyan.service.PlayerService; import com.anjoyo.wangyan.ui.R; import com.anjoyo.wangyan.util.NetWorkHelper; import com.anjoyo.wangyan.util.ParseHelper; import com.anjoyo.wangyan.util.ToastShow; /** * * 主界面,有侧滑菜单 * * @author Wangyan * */ public class MainActivity extends Activity { /** 自定义滚动条 **/ public static MyHSV myHSV; /** 滚动条的子布局对象 **/ private LinearLayout myHSV_Linear; /** 第二页布局视图对象 **/ private View mainView, onlineMusicView, aboutView; private TextView txtArg; /** View数组,加入子视图 **/ private View[] mainView_Children; /** 保存左边布局的宽度 */ private int leftWidth; /** 保存右边布局的宽度 */ private int rightWidth; /** 滚动参数 **/ private boolean flagMove = false; public static int offset = 0; private ScrollView slideMenu; private ImageButton actionbar_menu, pop_menu; // 侧滑菜单跳转view private LinearLayout myMusic, onlineMusic, setting, setting_set, quit; private RelativeLayout miniPlayer; // 我的音乐界面点击跳转view private LinearLayout localMusic, folder, artist, album, download, favor, playlist; private TextView tv_localMusic, tv_folder, tv_artist, tv_album, tv_download, tv_favor, tv_playlist; // miniplayer中的控件 private TextView title_mini, artist_mini; private ImageView album_mini; private ImageButton play, next; // 保存设置信息 private SharedPreferences sharedpre; private SharedPreferences.Editor sharedpre_editor; private Boolean flagWiFi = false, flagGes = false; private ToggleButton wifiToggle; private ToggleButton gesToggle; // 用于开启服务 private Intent service; // 歌曲播放状态改变的监听器 // 监听器改变UI private OnPlayerStateChangeListener stateChangeListener; // 网络歌曲列表 private ArrayList<MusicInfo> musicList; private ListView onlineLv; private View bottom; private Handler onlineHandler; private int curPage = 1; private int totalPage = 0; private OnlineListAdapter adapter; private int firstItem, lastItem; private Runnable runnable; private LinearLayout online_loading; private ImageView online_error_img; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.slide_menu_main); initView(); loadSetting(); setToggle(); setSlideMenu(); setMainView(mainView); // 启动service service = new Intent(this, PlayerService.class); startService(service); // 监听器改变UI stateChangeListener = new OnPlayerStateChangeListener() { @Override public void onStateChange(int state, int mode, List<MusicInfo> musicList, int position) { // TODO Auto-generated method stub setMainView(mainView); // 更改当前界面UI if (musicList != null) { Log.e(PlayerFinal.TAG, "回调主界面当前UI!!!!!!!!!!"); if (title_mini == null) { Log.e(PlayerFinal.TAG, "找不到title"); } title_mini.setText(musicList.get(position).getTitle()); Log.e(PlayerFinal.TAG, musicList.get(position).getTitle() "!!!!!"); artist_mini.setText(musicList.get(position).getArtist()); if (musicList.get(position).getAlbum_img_path() != null) { Uri uri = Uri.parse(musicList.get(position) .getAlbum_img_path()); album_mini.setImageURI(uri); } } else { title_mini.setText("欢迎来到我的音乐"); artist_mini.setText("让音乐跟我走"); } switch (state) { case PlayerFinal.STATE_PLAY: play.setImageResource(R.drawable.player_pause); break; case PlayerFinal.STATE_CONTINUE: play.setImageResource(R.drawable.player_pause); break; case PlayerFinal.STATE_PAUSE: play.setImageResource(R.drawable.player_play); break; case PlayerFinal.STATE_STOP: play.setImageResource(R.drawable.player_play); break; } } }; } /** * 设置setting按钮监听事件 */ private void setToggle() { // TODO Auto-generated method stub wifiToggle.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { // TODO Auto-generated method stub flagWiFi = isChecked; saveSetting(flagWiFi, flagGes); } }); gesToggle.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { // TODO Auto-generated method stub flagGes = isChecked; saveSetting(flagWiFi, flagGes); } }); } /** * 读取设置信息 */ private void loadSetting() { // TODO Auto-generated method stub sharedpre = getSharedPreferences("setting", Activity.MODE_PRIVATE); flagWiFi = sharedpre.getBoolean("wifi", false); flagGes = sharedpre.getBoolean("gesture", false); wifiToggle = (ToggleButton) this.findViewById(R.id.setting_wifi_toggle); gesToggle = (ToggleButton) this .findViewById(R.id.setting_gesture_toggle); wifiToggle.setChecked(flagWiFi); gesToggle.setChecked(flagGes); } /** * 保存设置信息 */ private void saveSetting(Boolean flag_wifi, Boolean flag_ges) { // TODO Auto-generated method stub sharedpre = getSharedPreferences("setting", Activity.MODE_PRIVATE); sharedpre_editor = sharedpre.edit(); sharedpre_editor.putBoolean("wifi", flag_wifi); sharedpre_editor.putBoolean("gesture", flag_ges); sharedpre_editor.commit(); } /** * 设置侧滑菜单监听事件 */ private void setSlideMenu() { // TODO Auto-generated method stub myMusic = (LinearLayout) this.findViewById(R.id.slide_menu_my_music); myMusic.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub int width = mainView_Children[0].getMeasuredWidth(); moveScrollList(width); onGlobalLayout(mainView); setMainView(mainView); } }); onlineMusic = (LinearLayout) this .findViewById(R.id.slide_menu_online_music); onlineMusic.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub int width = mainView_Children[0].getMeasuredWidth(); moveScrollList(width); onGlobalLayout(onlineMusicView); setOnlineMusic(onlineMusicView); } }); aboutView = (LinearLayout) this.findViewById(R.id.slide_menu_about); aboutView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub int width = mainView_Children[0].getMeasuredWidth(); moveScrollList(width); initView(); onGlobalLayout(aboutView); setAbout(aboutView); } }); setting = (LinearLayout) this.findViewById(R.id.slide_menu_setting); setting_set = (LinearLayout) this .findViewById(R.id.slide_menu_setting_set); setting.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if (setting_set.getVisibility() == View.VISIBLE) { setting_set.setVisibility(View.GONE); } else { setting_set.setVisibility(View.VISIBLE); } } }); quit = (LinearLayout) this.findViewById(R.id.slide_menu_quit); quit.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub System.exit(0); } }); } private void initView() { // TODO Auto-generated method stub // 自定义 myHSV = (MyHSV) findViewById(R.id.main_myHSV); // 第二布局中的linearlaout myHSV_Linear = (LinearLayout) findViewById(R.id.main_myHSV_linear); // 第一布局的linearlayout slideMenu = (ScrollView) findViewById(R.id.main_scrollview); // 动态生成一个TextView txtArg = new TextView(this); // 第二布局 mainView = LayoutInflater.from(this).inflate(R.layout.activity_main, null); onlineMusicView = LayoutInflater.from(this).inflate( R.layout.online_music, null); aboutView = LayoutInflater.from(this).inflate(R.layout.about, null); } @Override public void onWindowFocusChanged(boolean hasFocus) { // TODO Auto-generated method stub super.onWindowFocusChanged(hasFocus); onGlobalLayout(mainView); } private void onGlobalLayout(View v) { // TODO Auto-generated method stub mainView_Children = new View[] { txtArg, v }; leftWidth = slideMenu.getMeasuredWidth(); final int w = myHSV.getMeasuredWidth(); final int h = myHSV.getMeasuredHeight(); rightWidth = w - leftWidth;// 获得剩余部分的宽度 System.out.println("leftWidth------" leftWidth "w----" w " ----h----" h); myHSV_Linear.removeAllViews(); int[] dims = new int[2]; for (int i = 0; i < mainView_Children.length; i ) { getViewSize(i, w, h, dims); myHSV_Linear.addView(mainView_Children[i], dims[0], dims[1]); } myHSV.setBtnWith(rightWidth); myHSV.setAppWidth(w); } /** * 获取各个View视图的宽高 */ public void getViewSize(int idx, int w, int h, int[] dims) { dims[0] = w; dims[1] = h; final int menuIdx = 0; if (idx == menuIdx) { dims[0] = w - rightWidth; } System.out.println("idx---" idx "------w---" dims[0] "------h----" dims[1]); } /** * 顶部按钮左右移动 * * @param width */ public void moveScrollList(int width) { int menuWidth = width; if (flagMove) { // Scroll to 0 to reveal menu offset = 0; myHSV.smoothScrollTo(offset, 0); } else { // Scroll to menuWidth so menu isn't on screen. offset = menuWidth; myHSV.smoothScrollTo(offset, 0); } flagMove = !flagMove; } /** * 设置按键监听事件 */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub switch (keyCode) { case KeyEvent.KEYCODE_MENU: int width = mainView_Children[0].getMeasuredWidth(); moveScrollList(width); break; } return super.onKeyDown(keyCode, event); } /** * 设置主界面监听事件 * * @param v */ private void setMainView(View v) { // TODO Auto-generated method stub actionbar_menu = (ImageButton) v.findViewById(R.id.main_actionbar_menu); pop_menu = (ImageButton) v.findViewById(R.id.main_actionbar_scan); actionbar_menu.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub int width = mainView_Children[0].getMeasuredWidth(); moveScrollList(width); } }); pop_menu.setVisibility(View.INVISIBLE); pop_menu.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub } }); localMusic = (LinearLayout) v.findViewById(R.id.main_local_music_item); folder = (LinearLayout) v.findViewById(R.id.main_folder_item); artist = (LinearLayout) v.findViewById(R.id.main_artist_item); album = (LinearLayout) v.findViewById(R.id.main_album_item); download = (LinearLayout) v.findViewById(R.id.main_download_item); download.setVisibility(View.GONE); favor = (LinearLayout) v.findViewById(R.id.main_favor_item); playlist = (LinearLayout) v.findViewById(R.id.main_playlist_item); // 得到miniplayer上的控件 title_mini = (TextView) v.findViewById(R.id.main_miniplayer_song); artist_mini = (TextView) v.findViewById(R.id.main_miniplayer_artist); album_mini = (ImageView) v.findViewById(R.id.main_miniplayer_album); play = (ImageButton) v.findViewById(R.id.main_miniplayer_play); next = (ImageButton) v.findViewById(R.id.main_miniplayer_next); miniPlayer = (RelativeLayout) v .findViewById(R.id.main_miniplayer_layout); tv_localMusic = (TextView) v.findViewById(R.id.main_local_music_text); tv_folder = (TextView) v.findViewById(R.id.main_folder_text); tv_artist = (TextView) v.findViewById(R.id.main_artist_text); tv_album = (TextView) v.findViewById(R.id.main_album_text); tv_download = (TextView) v.findViewById(R.id.main_download_text); tv_favor = (TextView) v.findViewById(R.id.main_favor_text); tv_playlist = (TextView) v.findViewById(R.id.main_playlist_text); int[] data = initData(); tv_localMusic.setText(data[0] "首"); tv_favor.setText(data[1] "首"); localMusic.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent = new Intent(MainActivity.this, LocalMusic.class); startActivity(intent); } }); folder.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub } }); artist.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent = new Intent(MainActivity.this, ArtistSelect.class); startActivity(intent); } }); album.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent = new Intent(MainActivity.this, AlbumSelect.class); startActivity(intent); } }); download.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub } }); favor.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent = new Intent(MainActivity.this, FavorMusic.class); startActivity(intent); } }); playlist.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub } }); miniPlayer.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent = new Intent(MainActivity.this, PlayerAndLyric.class); startActivity(intent); } }); play.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub // 发送广播给service Intent intent = new Intent(); intent.setAction(PlayerService.ACTION_PLAY_BUTTON); sendBroadcast(intent); } }); next.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub // 发送广播给service Intent intent = new Intent(); intent.setAction(PlayerService.ACTION_PLAY_NEXT); sendBroadcast(intent); } }); } /** * 查询数据库,用于我的音乐界面,UI显示数据 * * @return int[] */ private int[] initData() { // TODO Auto-generated method stub MusicDBHelper localDbHelper = new MusicDBHelper(MainActivity.this); Cursor curLocal = localDbHelper.queryLocalByID(); Cursor curFav = localDbHelper.queryFavByID(); Cursor curArtist = localDbHelper.queryArtistByID(); Cursor curAlbum = localDbHelper.queryAlbumByID(); int[] dataSum = new int[] { curLocal.getCount(), curFav.getCount(), curArtist.getCount(), curAlbum.getCount() }; curLocal.close(); curFav.close(); curArtist.close(); curAlbum.close(); localDbHelper.close(); return dataSum; } /** * 设置在线音乐界面 * * @param v */ private void setOnlineMusic(View v) { actionbar_menu = (ImageButton) v .findViewById(R.id.online_actionbar_menu); actionbar_menu.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub int width = mainView_Children[0].getMeasuredWidth(); moveScrollList(width); } }); onlineLv = (ListView) v.findViewById(R.id.online_listview); online_error_img = (ImageView) v .findViewById(R.id.online_network_error); online_loading = (LinearLayout) v.findViewById(R.id.online_loading); // 设置加载图片旋转动画 RotateAnimation anim = new RotateAnimation(0, 360, RotateAnimation.RELATIVE_TO_SELF, 0.5f, RotateAnimation.RELATIVE_TO_SELF, 0.5f); anim.setDuration(1000); anim.setInterpolator(new LinearInterpolator()); anim.setRepeatCount(-1); ImageView loadImg = (ImageView) v.findViewById(R.id.online_loading_img); loadImg.startAnimation(anim); bottom = LayoutInflater.from(this).inflate( R.layout.online_listview_end, null); // onlineLv.addHeaderView(bottom); onlineLv.addFooterView(bottom); onlineLv.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { // TODO Auto-generated method stub if (lastItem == 10) {// head 11 curPage ; // 开启线程,加载数据 new Thread(runnable).start(); } // if (firstItem == 0) { // if (curPage > 1) { // curPage--; // } // new Thread(runnable).start(); // } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { // TODO Auto-generated method stub firstItem = firstVisibleItem; lastItem = totalItemCount - 1;// 因为加上了页脚 } }); onlineHandler = new Handler() { public void handleMessage(android.os.Message msg) { switch (msg.what) { case 0: musicList = (ArrayList<MusicInfo>) msg.obj; online_loading.setVisibility(View.GONE); onlineLv.setVisibility(View.VISIBLE); if (musicList != null) { adapter = new OnlineListAdapter(MainActivity.this, musicList); onlineLv.setAdapter(adapter); adapter.notifyDataSetChanged(); } else { ToastShow.toastShow(MainActivity.this, "未获取到网络歌曲信息"); } break; case 1: // ToastShow.toastShow(MainActivity.this, "开始下载"); break; case 2: // ToastShow.toastShow(MainActivity.this, "下载完毕"); break; case 3: ToastShow.toastShow(MainActivity.this, "请连接网络"); online_loading.setVisibility(View.GONE); online_error_img.setVisibility(View.VISIBLE); break; case 4: // 下载网络歌曲歌词 break; case 5: ToastShow.toastShow(MainActivity.this, "请开启wifi"); online_loading.setVisibility(View.GONE); online_error_img.setVisibility(View.VISIBLE); break; } }; }; runnable = new Runnable() { @Override public void run() { // TODO Auto-generated method stub Looper.prepare(); // 判断网络仅限wifi时,wifi可用,执行联网获取歌曲列表 // 未设置仅限wifi时,只要网络可用就执行联网操作 if ((flagWiFi && NetWorkHelper.isWifi(getApplicationContext())) || (!flagWiFi && NetWorkHelper .isNetWorkAvaliable(getApplicationContext()))) { ParseHelper helper = new ParseHelper(); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } totalPage = helper.getMusicTotalPage(); Log.e(PlayerFinal.TAG, "curPage----->" curPage "totalPage--->" totalPage); if (curPage <= totalPage) { musicList = helper.getMusicListByPage(curPage); } onlineHandler.sendMessage(onlineHandler.obtainMessage(0, musicList)); } else if (!NetWorkHelper .isNetWorkAvaliable(getApplicationContext())) { // 网络不可用时,发消息,提示用户网络不可用 onlineHandler.sendMessage(onlineHandler.obtainMessage(3)); } else if ((flagWiFi && !NetWorkHelper .isWifi(getApplicationContext()))) { // 网络不可用时,发消息,提示用户网络不可用 onlineHandler.sendMessage(onlineHandler.obtainMessage(5)); } Looper.loop(); } }; new Thread(runnable).start(); onlineLv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub Intent intent = new Intent(); intent.setAction(PlayerService.ACTION_PLAY_ITEM); intent.putParcelableArrayListExtra(PlayerFinal.PLAYER_LIST, musicList); intent.putExtra(PlayerFinal.PLAYER_POSITION, arg2); // 用于判断歌曲是网络还是本地 intent.putExtra(PlayerFinal.PLAYER_WHERE, "internet"); sendBroadcast(intent); // 下载歌词 String HttpUrl = ParseHelper.IP "/res/music/" musicList.get(arg2).getLyric_file_name(); Log.e(PlayerFinal.TAG, "lrcPath------->" HttpUrl); ThreadPoolUtilsImg .execute(new LrcDownThread(HttpUrl, onlineHandler, musicList.get(arg2).getLyric_file_name())); } }); } /** * 设置关于页面 * * @param v */ private void setAbout(View v) { actionbar_menu = (ImageButton) v .findViewById(R.id.about_actionbar_menu); actionbar_menu.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub int width = mainView_Children[0].getMeasuredWidth(); moveScrollList(width); } }); } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); // 改变当前界面UI int[] data = initData(); tv_localMusic.setText(data[0] "首"); tv_favor.setText(data[1] "首"); tv_artist.setText(data[2] "个歌手"); tv_album.setText(data[3] "张专辑"); // 注册播放状态改变的监听器 PlayerService.registerStateChangeListener(stateChangeListener); } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); // 解除注册状态改变监听器 PlayerService.unRegisterStateChangeListener(stateChangeListener); } @Override protected void onDestroy() { // TODO Auto-generated method stub stopService(service); super.onDestroy(); } }
好例子网口号:伸出你的我的手 — 分享!
网友评论
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
支持(0) 盖楼(回复)