第一篇: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.程序设计
…这部分自己填