第一篇:Android實驗報告—UI設計(定稿)
Android UI設計
實驗目的:
本實驗的目的是使學生深入了解Android程序框架結構、了解和掌握Android界面設計和界面編程。通過程序設計,掌握常用界面控件、菜單、以及界面事件的響應。
實驗要求:
設計程序實現一個電子菜單,應具有顯示菜單功能和選菜功能。通過選擇,將選中的菜單選項在界面做顯示,如下圖:
[實現提示]
1、建立Android工程,其中 工程名稱:MenuSelect579 應用名稱:MenuSelect579 包名稱:cn.edu.bistu.dj1001.MenuSelect579 Activity名稱:MenuSelect579
2、工程建立完畢后,進行相應界面設計,再編寫Java文件
程序源碼
package cn.edu.bistu.dj1001.MenuSelect579;import android.app.Activity;
import android.os.Bundle;import android.view.ContextMenu;import android.view.ContextMenu.ContextMenuInfo;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.TextView;public class MenuSelect579 extends Activity {
/** Called when the activity is first created.*/
TextView LabelView = null;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
LabelView =(TextView)findViewById(R.id.label);registerForContextMenu(LabelView);
}
final static int CONTEXT_MENU_1 = Menu.FIRST;
final static int CONTEXT_MENU_2 = Menu.FIRST+1;
final static int CONTEXT_MENU_3 = Menu.FIRST+2;
@Override
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo){
menu.setHeaderTitle(“今日菜單”);
menu.add(0, CONTEXT_MENU_1, 0,“宮保雞丁”);
menu.add(0, CONTEXT_MENU_2, 1,“干煸豆角”);
menu.add(0, CONTEXT_MENU_3, 2,“魚香肉絲”);
}
@Override
}
public boolean onContextItemSelected(MenuItem item){
} switch(item.getItemId()){
case CONTEXT_MENU_1: LabelView.setText(“宮保雞丁”);return true;case CONTEXT_MENU_2: LabelView.setText(“干煸豆角”);return true;case CONTEXT_MENU_3: LabelView.setText(“魚香肉絲”);return true;} return false;
程序運行結果:
實驗心得體會:(可選)
通過本次實驗熟悉了android的界面設計簡單方法和界面編程,鍛煉了實際動手能力,熟悉了 Android程序框架結構、Android界面設通過程序設計,掌握了常用界面控件、菜單、以及界面事件的響應。
第二篇:android實驗報告
移動應用開發實驗報告
實驗名稱
音樂播放器
班
級
學
號
姓
名
指導教師
實驗成績
2016 年04月
一、實驗目的
本項目是一款基于Android手機平臺的音樂播放器,使Android手機擁有個性的多媒體播放器,使手機顯得更生動靈活化,與人們更為接近,讓手機主人隨時隨地處于音樂視頻的旋律之中。使人們的生活更加多樣化。也使設計者更加熟練Android的技術和其它在市場上的特點。
二、實驗內容及要求
在其中寫清楚這個實驗具體要你做什么,怎么做,要達到什么樣的效果等。本設計實現的主要功能是播放Mp3,Wav多種格式的音樂文件,并且能夠控制播放,暫停,停止,下一首,上一首播放列等基本播放控制功能,界面簡明,操作簡單。
三、實驗方案設計
在其中寫清楚你的程序的詳細設計,用流程圖配文字的形式描述。如果其中涉及到算法,一定要把算法闡述清楚。
3.1.1假設安裝了音樂播放器的用戶是系統的主要設計對象,其擁有以下操作,啟動軟件、播放音樂、暫停播放、停止播放、退出軟件,其用例圖如下
圖2.1 播放器基本用例圖
3.1.2用例分析 ?用例名稱:啟動軟件 參與者:用戶
目標:使得用戶啟動軟件并加載手機和sd卡上的音頻文件到播放列表 前置條件:無
基本事件流:1.用戶啟動軟件
2.播放器將播放列表中的當前的歌曲
?用例名稱:播放 參與者:用戶
目標:使得用戶可以播放在播放列表中選中的歌曲 前置條件:播放器正在運行
基本事件流:1.用戶單擊“播放”按鈕
2.播放器將播放列表中的當前的歌曲
?用例名稱:暫停 參與者:用戶
目標:使得用戶可以暫停正在播放的歌曲 前置條件:歌曲正在播放且未停止和暫停 基本事件流:1.用戶單擊“暫停”按鈕
2.播放器將暫停當前的歌曲
④用例名稱:停止 參與者:用戶
目標:使得用戶可以停止正在播放的歌曲 前置條件:歌曲正在播放或暫停 基本事件流:1.用戶單擊“停止”按鈕
2.播放器將停止當前播放的歌曲
⑤用例名稱:推出 參與者:用戶
目標:使得用戶退出或者后臺播放音樂 前置條件:程序在運行
基本事件流:1.用戶按返回鍵
2.播放器退出或者進入后臺播放
四、實驗測試
Step1.啟動軟件后,軟件自動檢索手機和sd卡的音頻文件,并組織顯示成列表.Step2.點擊列表的歌曲名字。
Step3.播放音樂。
Step4.點擊暫停,音樂暫停
Step5.點擊播放 轉到step3 Step6.點擊停止 停止播放音樂
Step7.點擊退出,若音樂處于播放狀態,則音樂轉向后臺播放,界面退出。
Step8.點擊退戶,若音樂處于暫停或者停止狀態,直接退出。
音樂播放器流程圖
4.1MusicInfoController類
這個類繼承于service,是播放音樂的服務類。播放音樂,暫停音樂,停止播放等操作都封裝在這個類中。
主要的執行動作有:
4.1.1.類啟動 onCreate(){
mMediaPlayer = new MediaPlayer();//分配一個播放對象
mMediaPlayer.setOnPreparedListener(mPrepareListener);//綁定之前
mMediaPlayer.setOnCompletionListener(mCompleteListener);//綁定之 后
}
4.1.2.服務綁定activity
MediaPlayer.OnCompletionListener mCompleteListener = new
MediaPlayer.OnCompletionListener()//實例化一個綁定監聽器的匿名類
{
public void onCompletion(MediaPlayer mp)//完成綁定后
{
broadcastEvent(PLAY_COMPLETED);//廣播消息
}
};
4.2MusicInfoController類
這個類主要用于獲取android系統中的音頻文件,并提供訪問接口,它是一個單例類。
4.2.1獲得播放文件列表
private Cursor query(Uri uri, String[] prjs, String selections, String[] selectArgs, String order){ ContentResolver resolver = pApp.getContentResolver();//取得一個連接對象if(resolver == null){
return null;
}
return resolver.query(uri, prjs, selections, selectArgs, order);} public Cursor getAllSongs(){
return query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER);//查詢ContentResolver 的所有音頻文件
} 4.3MusicList類
改類繼承于ListActivity,主要用于顯示歌曲列表,并且封裝部分操作,以及與父級目標通信。
4.3.1播放
protected void onListItemClick(ListView l, View v, int position, long id){ //歌曲列表的某項被點擊
super.onListItemClick(l, v, position, id);
if(mCursor == null ||mCursor.getCount()== 0){
return;
}
mCursor.moveToPosition(position);//游標移動到當前路徑
String url = mCursor.getString(mCursor
.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));//取得絕對路徑
mMusicPlayerService.setDataSource(url);//傳遞絕對路徑
mMusicPlayerService.start();//播放音樂
}
4.3.2暫停/播放
mPlayPauseButton.setOnClickListener(new Button.OnClickListener(){
public void onClick(View v){
if(mMusicPlayerService!= null &&
mMusicPlayerService.isPlaying()){
mMusicPlayerService.pause();//音樂播放的服務暫停
mPlayPauseButton.setText(R.string.play);//改變按鈕文字
} else if(mMusicPlayerService!= null){
mMusicPlayerService.start();//如果已經是暫停,則播放音樂
mPlayPauseButton.setText(R.string.pause);//改變文字
}
}
});
4.3.3停止
mStopButton.setOnClickListener(new Button.OnClickListener(){
public void onClick(View v){
// Perform action on click
if(mMusicPlayerService!= null){
mTextView.setVisibility(View.VISIBLE);//改變文字狀態
mPlayPauseButton.setVisibility(View.INVISIBLE);//隱藏按鈕
mStopButton.setVisibility(View.INVISIBLE);//隱藏停止按鈕
mMusicPlayerService.stop();//后臺音樂停止播放
}
}
});4.4MusicPlayerApp類
該類繼承與Application,是程序的生存類。可以標識音樂播放器的生命周期,包括音樂在后臺播放等。
4.4.1單例模式
public void onCreate(){
super.onCreate();
mMusicInfoController = MusicInfoController.getInstance(this);//返回該類的一個唯一實例
}
public MusicInfoController getMusicInfoController(){
return mMusicInfoController;}
五、程序的使用手冊
系統編譯生成apk文件,將apk文件拷到手機或者sd卡中,直接打開即可安裝,或者安裝360手機助手通過usb調試的方式進行安裝。
啟動軟件后,加載歌曲列表現在這個界面上,如01表示歌曲名,unknown表示歌曲的演唱者
軟件啟動界面
從加載的歌曲列表中點擊要播放的歌曲,開始播放
音樂播放界面
六、心得體會
通過對Android手機平臺的音樂播放器軟件的開發,使我對Android音樂播放器系統的整體設計有一個深入的了解,對整個流程也會有一個清晰的認識。開發Android音樂播放器,要抓住開發的核心部分,音樂播放器大體由播放主界面、播放列表、菜單、播放設置、文件瀏覽、歌曲搜索六大核心組成,只要掌握了這六部分的開發,音樂播放器就能初具規模。而其它的功能都是在這六個功能的基礎上去補充添加的,但是這是功能的確是必不可少的功能,否則就不能算是音樂播放器了。
第三篇:Android實驗報告—網絡通信
實驗三
Android網絡通信
實驗目的:
本實驗的目的是使學生深入了解利用Intent實現進程間的通信過程。學會利用Intent進行Activity的跳轉,以及鏈接網頁信息;學會利用Intent將其他Activity的信息返回到Activity中的方法。體會Activity間通信的過程。
實驗要求:
編程實現下述功能:主界面上有一個“登錄”按鈕和“鏈接網頁”按鈕,點擊“登錄”按鈕后打開一個新的Activity;新的Activity上面有輸入用戶名和密碼的控件(如下圖所示)點擊“鏈接網頁”按鈕,新的Activity上面有輸入Uri信息的控件,可以鏈接到相應的網站,在用戶關閉這個Activity后,返回到主界面中
程序界面如下圖所示:
[實現提示]
1、建立Android工程,其中 工程名稱:WebCommunication579
包名稱:cn.edu.bistu.dj1001.WebCommunication579 Activity名稱:WebCommunication579
2、工程建立完畢后,首先進行界面設計,建立相應的子Layout界面
3、在工程中添加相應的.java文件,處理各個Activity的事件響應
4、在Manifest中添加新建的Activity信息,進行注冊。
程序源碼:
主界面java文件代碼: package cn.deu.bistu.dj1001.WebCommunication579;
import android.app.Activity;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;
public class WebCommunication579 extends Activity { private Button btnLogin,btnGoToWeb;private TextView show;private static final int SUBACTIVITY1 = 1;@Override
public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);setContentView(R.layout.main);btnLogin=(Button)findViewById(R.id.btnLogin);btnGoToWeb=(Button)findViewById(R.id.btnGoToWeb);show=(TextView)findViewById(R.id.A1show);
btnLogin.setOnClickListener(new OnClickListener(){ public void onClick(View v){ Intent intent = new Intent(WebCommunication592.this, activity1.class);
startActivityForResult(intent, SUBACTIVITY1);
}});btnGoToWeb.setOnClickListener(new OnClickListener(){ public void onClick(View v){ Intent intent = new Intent(WebCommunication592.this, activity2.class);startActivity(intent);}});} protected void onActivityResult(int requestCode, int resultCode, Intent data){ super.onActivityResult(requestCode, resultCode, data);switch(requestCode){ case SUBACTIVITY1: if(resultCode == RESULT_OK){Uri uriData = data.getData();show.setText(uriData.toString());} break;}};} 界面一java文件代碼:
package cn.deu.bistu.dj1001.WebCommunication579;
import android.app.Activity;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;
public class activity1 extends Activity { private Button btnOK,btnCancel;private EditText edtInput;public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);setContentView(R.layout.activity1);edtInput=(EditText)findViewById(R.id.edtA1Input);btnOK=(Button)findViewById(R.id.btnA1OK);btnCancel=(Button)findViewById(R.id.btnA1Cancel);btnOK.setOnClickListener(new OnClickListener(){
public void onClick(View v){ String uriString = edtInput.getText().toString();Uri data = Uri.parse(uriString);Intent result = new Intent(null, data);setResult(RESULT_OK, result);finish();}});btnCancel.setOnClickListener(new OnClickListener(){ public void onClick(View view){ finish();}});}} 界面二java文件代碼:
package cn.deu.bistu.dj1001.WebCommunication579;
import android.app.Activity;import android.content.Intent;import android.net.Uri;import android.os.Bundle;
import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;
public class activity2 extends Activity { private EditText edtInput;private Button btnOK,btnCancel;public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);setContentView(R.layout.activity2);edtInput=(EditText)findViewById(R.id.edtA2Input);btnOK=(Button)findViewById(R.id.btnA2OK);btnCancel=(Button)findViewById(R.id.btnA2Cancel);btnOK.setOnClickListener(new OnClickListener(){ public void onClick(View v){ Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(edtInput.getText().toString()));startActivity(intent);}});btnCancel.setOnClickListener(new OnClickListener(){
public void onClick(View v){
finish();
}});}} 主界面的xml文件代碼:
xmlns:android=“http://schemas.android.com/apk/res/android” android:orientation=“Horizontal” android:layout_width=“fill_parent” android:layout_height=“fill_parent”> android:text=“" android:id=”@+id/A1show“ android:layout_width=”wrap_content“ android:layout_height=”wrap_content“>
界面一的xml文件代碼:
android:orientation=”Horizontal“ android:layout_width=”fill_parent“ android:layout_height=”fill_parent“ xmlns:android=”http://schemas.android.com/apk/res/android“> android:layout_width=”wrap_content“ android:layout_height=”wrap_content“> android:text=”用戶名和密碼:“ android:layout_width=”wrap_content“ android:layout_height=”wrap_content“> android:text=”“ android:id=”@+id/edtA1Input“ android:layout_width=”wrap_content“ android:layout_height=”wrap_content“> android:layout_width=”wrap_content“ android:layout_height=”wrap_content“>
界面二的xml文件代碼: xmlns:android=”http://schemas.android.com/apk/res/android“> android:text=”“ android:id=”@+id/edtA2Input“ android:layout_width=”match_parent“ android:layout_height=”wrap_content“>
程序運行結果:
程序包:
主界面:
點擊登錄按鈕后:
點擊確定按鈕后:
點擊鏈接網頁按鈕后:
點擊確定按鈕后:
實驗心得體會:
通過本次實驗深入了解了Intent實現進程間的通信過程。熟悉了利用Intent將其他Activity的信息返回到Activity中的方法,可以更熟練的使用安卓編程軟件。
第四篇:Android UI開發專題(三) 各種Drawable
本次我們主要講解Android平臺下的各種Drawable,這里在SDK的android.graphics.drawable包下面可以看到有各種Drawable類多達十幾種,它們到底之間有什么關系和區別呢?
一、AnimationDrawable
顧名思義該類主要表示動畫的圖形類,可以實現逐幀播放的效果,下面代碼示例如下
1.定義一個cwj_animation.xml 放到res/drawable 目錄下,其中定義的屬性duration為延時,單位為毫秒,而oneshot屬性表示是否僅播放一次,內容為:!--
Code highlighting produced by Actipro CodeHighlighter(freeware)http:///
-->1
2.在java中調用也很簡單
ImageView img =(ImageView)findViewById(R.id.cwj_image);//首先聲明一個ImageView對象在xml布局文件中
img.setBackgroundResource(R.drawable.cwj_animation);//我們剛才的animation定義的xml文件
AnimationDrawable frameAnimation =(AnimationDrawable)
img.getBackground();//構造AnimationDrawable對象
frameAnimation.start()//開始播放動畫
3.AnimationDrawable類還提供了一些常用的方法如下:
void stop()停止
void addFrame(Drawable frame, int duration)添加一幀,類似xml中的布局
Drawable getFrame(int index)返回某幀的Drawable圖形
int getNumberOfFrames()返回總共動畫幀數
boolean isOneShot()是否僅播放一次
boolean isRunning()是否正在播放
二、BitmapDrawable
在Android平臺中對于縮放、變形的Bitmap對象由BitmapDrawable類表示,其構造方法也很簡單,由于該類繼承于 android.graphics.drawable.Drawable,相對Drawable而言提供了更多的有關位圖的操作方法,主要的構造方法如 下:BitmapDrawable()//直接構造一個空的對象,這樣方式不推薦使用,SDK標記為deprecated.未來可能無法使用。
BitmapDrawable(Resources res)//從資源中構造
BitmapDrawable(Bitmap bitmap)//從Bitmap對象直接構造,但也是不推薦,而是希望用下一種
BitmapDrawable(Resources res, Bitmap bitmap)//從bitmap中創建設置初始的分辨率從res中
BitmapDrawable(String filepath)//從具體文件路徑構造,也不推薦使用,而是下一種更好
BitmapDrawable(Resources res, String filepath)//同上
BitmapDrawable(InputStream is)//從輸入流中構造,同樣推薦下面的方法
BitmapDrawable(Resources res, InputStream is)//同上
在BitmapDrawable類中相對于Drawable類主要新增了以下幾種方法,均比較實用:
final Bitmap getBitmap()獲取一個Bitmap對象
int getOpacity()//獲取透明度
void setAntiAlias(boolean aa)//是否抗鋸齒
void setTargetDensity(Canvas canvas)//設置目標Canvas密度void setTargetDensity(DisplayMetrics metrics)
三、ClipDrawable
ColorDrawable
Drawable
GradientDrawable
InsetDrawable
LayerDrawable
LevelListDrawable
NinePatchDrawable
PaintDrawable
PictureDrawable
RotateDrawable
ScaleDrawable
ShapeDrawable
StateListDrawable
TransitionDrawable
以上的類型在常見的開發一般較少出現,主要是基類構造使用,Android內部的多個Widget基礎控件使用了,感興趣的網友可以查看開源GIT中的相關內容。
第五篇:Android實驗格式簡易計算器實驗報告
實驗報告
2013-2014 學年第2學期
課程名稱:嵌入式操作系統
實驗題目:簡易計算器的設計與實現
專業:計算機科學與技術、信息處理(是什么專業,寫什么專業)班級:計算本1101(按自己班級填寫)
日期填寫 2014年4月 8日
實驗題目:簡易計算器的設計與實現
實驗類型:上機實驗
一、實驗目的及要求
1.掌握線性布局的應用;
2.掌握表格布局的應用;
3.掌握數組的應用;
4.掌握如何Button組件的使用;
5.掌握代碼中訪問布局組件的方法;
6.掌握特定組件的事件設計方法。
二、實驗儀器設備與軟件環境
1、電腦。
2、Android集成開發工具adt-bundle。
三、實驗過程
1、布局設計
…這部分自己填
2.程序設計
…這部分自己填