Jamendo开源在线音乐播放器源码分析(二)
来源:互联网 发布:英英互译软件 编辑:程序博客网 时间:2024/05/06 14:29
三、HomeActivity
HomeActivity是一个central navigation place,中央导航activity,各个子模块的跳转都要先回到这,其他activity切换到该activity都要通过调用其静态方法launch()。
布局文件时main.xml。整体分为上面的ViewFlipper和下面的ListView,ListView是套在GestureOverlayView下的。分几部分介绍。
1、ViewFlipper,其实就是一个FrameLayout,可以通过setDisplayedChild(int whichchild)或者showNext()等显示其中的子布局,深入的用法比如加入动画可以自己去搜。
2、手势
com.teleca.jamendo.gestures 包是一些手势相关的处理代码。
类图:
gesture的create与perform
这儿的gesture是制作好放到raw目录下的,如何create一个gesture呢,在SDK的demos里有一个GestureBuilder的demo就教你如何create gesture。
create一个gesture的基本步骤:
//sd卡目录下new一个名为gestures的文件File mStoreFile = new File(Environment.getExternalStorageDirectory(), "gestures");//文件中读取GestureLibrary sStore= GestureLibraries.fromFile(mStoreFile);//在这个overlayView上画手势并设置监听GestureOverlayView overlay = (GestureOverlayView) findViewById(R.id.gestures_overlay);overlay.addOnGestureListener(new GesturesProcessor());private Gesture mGesture;private class GesturesProcessor implements GestureOverlayView.OnGestureListener { public void onGestureStarted(GestureOverlayView overlay, MotionEvent event) { mGesture = null; } public void onGesture(GestureOverlayView overlay, MotionEvent event) { } public void onGestureEnded(GestureOverlayView overlay, MotionEvent event) { //画完得到手势,如果长度过短则清除 mGesture = overlay.getGesture(); if (mGesture.getLength() < LENGTH_THRESHOLD) { overlay.clear(false); } } public void onGestureCancelled(GestureOverlayView overlay, MotionEvent event) { } }public void addGesture(View v) { if (mGesture != null) { final TextView input = (TextView) findViewById(R.id.gesture_name); final CharSequence name = input.getText(); if (name.length() == 0) { input.setError(getString(R.string.error_missing_name)); return; } //用一个名字保存gesture sStore.addGesture(name.toString(), mGesture); sStore.save(); } }你可以把文件移到raw目录下。
create完就要perform,即识别这个手势并赋予它一定的功能,播放、暂停等。
基本步骤:
//跟create时监听不同mGestureOverlayView.addOnGesturePerformedListener(JamendoApplication.getInstance().getPlayerGestureHandler());//从raw目录下读取GestureLibrary mLibrary= GestureLibraries.fromRawResource(context, R.raw.gestures);mLoaded = mLibrary.load();//覆写的方法@Overridepublic void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {if (!mLoaded) {if (!load()) {return;}}//识别 ArrayList<Prediction> predictions = mLibrary.recognize(gesture);if (predictions.size() > 0) {Prediction prediction = predictions.get(0);Log.v(JamendoApplication.TAG, "Gesture " + prediction.name+ " recognized with score " + prediction.score);if (prediction.score > 2.0) {//分数越高越精确,执行相应的功能 GestureCommand command = getRegister().getCommand(prediction.name);if (command != null) {command.execute();}}}}具体的执行交给具体的GestureCommand。每个GestureCommand都是放在GestureCommandRegister里的,结构非常清晰。
配置文件:
<android.gesture.GestureOverlayViewxmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/gestures"android:layout_width="fill_parent" android:layout_height="fill_parent"android:gestureStrokeType="multiple"android:eventsInterceptionEnabled="false" android:orientation="vertical"></android.gesture.GestureOverlayView>可以在设置里禁用手势功能
boolean gesturesEnabled = PreferenceManager.getDefaultSharedPreferences(this).getBoolean("gestures", true);mGestureOverlayView.setEnabled(gesturesEnabled);下篇继续分析HomeActivity。
- Jamendo开源在线音乐播放器源码分析(二)
- Jamendo开源在线音乐播放器源码分析(一)
- Jamendo开源在线音乐播放器源码分析(三)
- Jamendo开源在线音乐播放器源码分析(四)
- Android Jamendo开源在线音乐播放器源码分析一 jamendo初步认识
- Android Jamendo开源在线音乐播放器源码分析一 jamendo初步认识
- 开源Jamendo在线音乐播放器源码(二)
- Jamendo开源在线音乐播放器源码分析播放界面布局
- Android Jamendo开源在线音乐播放器源码分析四 HomeActivity分析
- Android Jamendo开源在线音乐播放器源码分析五 网络连接模块的分析
- Android Jamendo开源在线音乐播放器源码分析八 Adapter的分析
- Android Jamendo开源在线音乐播放器源码分析三 程序首界面
- Android Jamendo开源在线音乐播放器源码分析六 对com.teleca.jamendo.api和com.teleca.jamendo.api.impl类的分析
- Android Jamendo开源在线音乐播放器源码分析七 数据缓存和图片缓存的分析
- Android Jamendo开源在线音乐播放器源码分析九 ViewFlipper及自定义布局控件的分析
- 开源Jamendo在线音乐播放器源码(一)
- 开源Jamendo在线音乐播放器源码(三)
- 开源Jamendo在线音乐播放器源码(四)
- spring_mvc使用注解1
- POJ 2983(差分约束-有无解)
- spring_mvc 使用注解2
- 买了苹果三件套才有脸面么
- 图像处理和图像识别中常用的OpenCV函数
- Jamendo开源在线音乐播放器源码分析(二)
- 网页中添加百度地图
- SQLite学习笔记(1)
- What is svchost.exe And Why Is It Running?
- 宽字符和窄字符的转换接口
- 让你充满魅力的10大说话技巧
- zoj1713(C语言)
- 软件研发 针对C/C++开发者的Vim插件
- svn add-添加到版本库