Android实验711103xxxxx.doc_第1页
Android实验711103xxxxx.doc_第2页
Android实验711103xxxxx.doc_第3页
Android实验711103xxxxx.doc_第4页
Android实验711103xxxxx.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Android实验报告 711103xx xxx 目录实验一2 实验二5实验三12实验心得 20实验一 Android开发平台搭建一、 实验目的:搭建Android开发环境二、 实验内容及步骤:(部分摘自实验要求)1.安装JDK 从官网上下载,并安装JDK1.6。2.安装Android SDK并运行虚拟Android手机选择“Window”菜单下的“Preferences”选择Android,输入SDK位置(eclipse文件夹下的android-sdk-windows-1.6_r1),点Apply后确定。选择“Window”菜单下“AVD Manager”,new点完参数后Create AVD选择新建好的虚拟手机点击Start3.导入已有项目选择“File”菜单中“Import”选择General下的Existing Projects into Workspace,然后点击Next在Browse中选择要导入的项目的文件夹后,点击Finish。4.新建工程选择“File”菜单中“New”-“Android Project”输入工程名后点下一步SDK选择Android 1.6后点下一步Package Name填写完毕后点完成。至此,Android开发平台就搭建好了并可以创建自己的Android项目了。实验二 Android媒体播放器一、实验目的:了解Android下的编程,完成一个媒体播放器小项目的开发。二、实验要求:1、界面美化2、链接音视频3、已有曲目或自选曲目的加入三、 实验步骤:1、音频播放器1)设计页面布局A、按钮:上一首歌曲、停止、播放、暂停、下一首歌曲。B、歌曲列表:为ListView。在SD卡中导入要播放的歌曲,通过List来逐行显示之。2)图片添加将所需要的按钮的图片放入Drawable文件夹内,例如停止、开始、暂停。main.xml 代码:7 Android实验报告 711103xx xxx 3)完成按钮事件分别添加各个按钮的事件。代码如下:22MusicActivity.java:package net.androidla.music;import java.io.File;import java.util.ArrayList;import java.util.List;import android.app.ListActivity;import android.media.MediaPlayer;import android.media.MediaPlayer.OnCompletionListener;import android.os.Bundle;import android.view.KeyEvent;import android.view.View;import android.view.View.OnClickListener;import android.widget.ArrayAdapter;import android.widget.Button;import android.widget.ListView;public class MusicActivity extends ListActivity private MediaPlayer myMediaPlayer;private List myMusicList = new ArrayList();private int currentListItem = 0;private static final String MUSIC_PATH = new String(/mnt/sdcard/); Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); myMediaPlayer=new MediaPlayer(); findView(); musicList(); listener(); private void musicList() File home = new File(MUSIC_PATH); if (home.listFiles(new MusicFilter().length0) for (File file:home.listFiles(new MusicFilter() myMusicList.add(file.getName(); ArrayAdapter musicList = new ArrayAdapter(MusicActivity.this, R.layout.musicitme, myMusicList); setListAdapter(musicList); private void findView() ViewHolder.start = (Button) findViewById(R.id.start); ViewHolder.stop = (Button) findViewById(R.id.stop); ViewHolder.next = (Button) findViewById(R.id.next); ViewHolder.pause = (Button) findViewById(R.id.pause); ViewHolder.last = (Button) findViewById(R.id.last); private void listener() ViewHolder.stop.setOnClickListener(onClickListener); ViewHolder.start.setOnClickListener(onClickListener);ViewHolder.next.setOnClickListener(onClickListener); ViewHolder.pause.setOnClickListener(onClickListener);ViewHolder.last.setOnClickListener(onClickListener); private void playMusic(String path) try myMediaPlayer.reset();myMediaPlayer.setDataSource(path);myMediaPlayer.prepare();myMediaPlayer.start();myMediaPlayer.setOnCompletionListener(new OnCompletionListener() Overridepublic void onCompletion(MediaPlayer mp) nextMusic();); catch (Exception e) e.printStackTrace(); private void nextMusic() if (+currentListItem = myMusicList.size() currentListItem = myMusicList.size(); else playMusic(MUSIC_PATH + myMusicList.get(currentListItem); private void lastMusic() if (currentListItem != 0) if (-currentListItem mksdcard 1024M D:workspaceandroid_sdcard_image用建好的sd卡新建一个AVD2) 设计播放器界面(main.xml)添加SurfaceView到Android界面中,并将其填满整个手机界面。main.xml: 3) 绑定要播放的视频文件在程序中创建Surfaceview时,就直接载入该视频。VedioPlayerActivity.java:package seu.vedio;import android.app.Activity;import android.media.MediaPlayer;import android.media.MediaPlayer.OnBufferingUpdateListener;import android.media.MediaPlayer.OnCompletionListener;import android.media.MediaPlayer.OnPreparedListener;import android.media.MediaPlayer.OnVideoSizeChangedListener;import android.os.Bundle;import android.util.Log;import android.view.SurfaceHolder;import android.view.SurfaceView;public class VedioPlayerActivity extends Activity implementsOnBufferingUpdateListener, OnCompletionListener, OnPreparedListener,OnVideoSizeChangedListener, SurfaceHolder.Callback private static final String TAG = MediaPlayerDemo;private int mVideoWidth;private int mVideoHeight;private MediaPlayer mMediaPlayer;private SurfaceView mPreview;private SurfaceHolder holder;Overridepublic void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.main);mPreview = (SurfaceView) findViewById(R.id.surface);holder = mPreview.getHolder();holder.addCallback(this);holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);Overridepublic void onBufferingUpdate(MediaPlayer mp, int percent) Log.d(TAG, onBufferingUpdate called);Overridepublic void onCompletion(MediaPlayer mp) Log.d(TAG, onCompletion called);Overridepublic void onPrepared(MediaPlayer mp) Log.d(TAG, onPrepared called);mMediaPlayer.start();Overridepublic void onVideoSizeChanged(MediaPlayer mp, int width, int height) Log.d(TAG, onVideoSizeChanged called);mVideoWidth = mp.getVideoWidth();mVideoHeight = mp.getVideoHeight();if (mVideoWidth != 0 & mVideoHeight != 0) holder.setFixedSize(mVideoWidth, mVideoHeight);mMediaPlayer.start();Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) Log.d(TAG, surfaceChanged called);Overridepublic void surfaceCreated(SurfaceHolder holder) String path = /sdcard/test.3gp;try mMediaPlayer = new MediaPlayer();mMediaPlayer.setDataSource(path);mMediaPlayer.setDisplay(holder);mMediaPlayer.prepare();mMediaPlayer.setOnBufferingUpdateListener(this);mMediaPlayer.setOnCompletionListener(this);mMediaPlayer.setOnPreparedListener(this);mMediaPlayer.setOnVideoSizeChangedListener(this); catch (Exception e) Log.e(TAG, error: + e.getMessage(), e);Overridepublic void surfaceDestroyed(SurfaceHolder holder) Log.d(TAG, surfaceDestroyed called);Overrideprotected void onDestroy() super.onDestroy();Log.d(TAG, onDestroy called);if (mMediaPlayer != null) mMediaPlayer.release();mMediaPlayer = null;mVideoWidth = 0;mVideoHeight = 0;4) 运行结果实验三 Android游戏开发贪食蛇一、实验目的 通过样例代码的学习,可以自己设计并实现一款Android平台下的小应用,或者小游戏。二、实验要求1、从系统的眼光去学习给出的样例代码。2、通过学习,可以试着完善或者改进样例程序的功能。3、也可以自己设计并实现一款属于自己的小应用。三、实验内容 本次实验,通过的贪食蛇样例代码的学习,加上资料查阅,理解其架构优点,理解技术的实现。然后试着按着自己的思路,尝试编写出贪食蛇小游戏。遗憾的是,因为考试领进,时间的关系,加之对于还没入门的初学者来说,有一定的难度,最终没能完全实现。但是学习的过程,还是有很大收获的。 1、 样例代码学习 界面如下图作为一个没入门的新手,我确实是花了不少力气来读懂,并试着理解它的代码。对于各种不懂的地方,慢慢查询资料,对于新的方法,通过修改代码尝试效果。到现在终于能算个一知半解。在我看来这个版本,已算是相当经典了。实现游戏的界面 :1、 先声明用来存放绘画图像的X,Y轴的位置的数组:private int mTileGrid;/*Tileindex 图片的索引X轴的位置:Y轴的位置:*/2、 编写存放图片索引用图片的X,Y轴位置;public void setTile(int tileindex, int x, int y) mTileGridxy = tileindex;3、调用以上的方法以循环的方式位置数组赋值以及图片的索引,private void updateWalls() for (int x = 0; x mXTileCount; x+) setTile(GREEN_STAR, x, 0);/设置顶部的界线的位置setTile(GREEN_STAR, x, mYTileCount - 1);/ 设置底部界线的for (int y = 1; y mYTileCount - 1; y+) setTile(GREEN_STAR, 0, y);/设置左边的界线的位置setTile(GREEN_STAR, mXTileCount - 1, y);/设置右边的界线的位置4、重写VIEW 类里面的方法。 把界线画出。public void onDraw(Canvas canvas) super.onDraw(canvas);for (int x = 0; x mXTileCount; x += 1) for (int y = 0; y 0) canvas.drawBitmap(mTileArraymTileGridxy,mXOffset + x * mTileSize,mYOffset + y * mTileSize,mPaint);同上可见: 地图其实就是由图片数组拼直面成的。 面图片又是通过他的图片索引找到,并在mTileGridxy,获取他们的位置索引来确定图片的位置。 这样在一个手机的页面就形成了,简单吧。苹果的位置就是更简单了,他是随机生成的, 而且必须在现在蛇的位置相对远距离:看看他的代码:private void addRandomApple() Coordinate newCoord = null;boolean found = false;while (!found) / Choose a new location for our apple/ 随机生成新的X,Y位置int newX = 1 + RNG.nextInt(mXTileCount - 2);int newY = 1 + RNG.nextInt(mYTileCount - 2);newCoord = new Coordinate(newX, newY);boolean collision = false;int snakelength = mSnakeTrail.size();for (int index = 0; index snakelength; index+) / 检查一下是存放的位置是否合理流if (mSnakeTrail.get(index).equals(newCoord) collision = true;found = !collision;if (newCoord = null) Log.e(TAG, Somehow ended up with a null newCoord!);mAppleList.add(newCoord);/ 添加到新苹果的列表中,2) 实现键盘事件:键盘主要起操作作用, 在任何的手机游戏中键盘都是起重要的用,要本游戏中, 他就是起控制蛇的行走方向: 现在我们分析他的代码:if (keyCode = KeyEvent.KEYCODE_DPAD_DOWN) if (mDirection != NORTH) mNextDirection = SOUTH;return (true);if (keyCode = KeyEvent.KEYCODE_DPAD_LEFT) if (mDirection != EAST) mNextDirection = WEST;return (true);if (keyCode = KeyEvent.KEYCODE_DPAD_RIGHT) if (mDirection != WEST) mNextDirection = EAST;return (true);以上的代码大家一看就明白, 就是通过判断那个键按下, 然后再给要走的方向(mDirection)赋值。以下的代码就是通switch (mDirection) case EAST: newHead = new Coordinate(head.x + 1, head.y);break;case WEST: newHead = new Coordinate(head.x - 1, head.y);break;case NORTH: newHead = new Coordinate(head.x, head.y - 1);break;case SOUTH: newHead = new Coordinate(head.x, head.y + 1);break;从以上的键盘代码我们可以看得出,程序中是通过触发来改变坐标(+1,-1)的方式来改蛇头的方向, 可见坐标在游戏编程中的作用, 这个也是根据手机的屏幕是点阵的方式来显示, 所以坐标就是一个定位器。蛇吃苹果又是怎样去实现?上面我所说到的坐标就起了作用。在蛇所经过的每一个坐标, 他们都要在苹果所在的(ArrayList mAppleList = new ArrayList()坐标集里面集依次判断,若是坐标相同,那个这个苹果就被蛇吃了 。class RefreshHandler extends Handler /响应消息。public void handleMessage(Message msg) SnakeView.this.update();/ 重要页面SnakeView.this.invalidate();刷新页面/ 向外提供人工的调用消息的接口,public void sleep(long delayMillis) this.removeMessages(0);/注消消息/ 添加消息,sendMessageDelayed(obtainMessage(0), delayMillis);刷新就是这样简单的实现了。 所开发出的游戏也是挺简单。 2、 自己编码尝试1.创建一个资源类(Global),这个类能够提供蛇头的大小、蛇头的方向、游戏面板的大小。具体代码: class Global /蛇头的宽度 public static int Snake_Width = 20; /蛇头的长度 public static int Snake_Height = 20; /蛇头的方向 public static Dircte Snake_Dir = Dircte.Right; /窗体的宽度 public static int Game_Width = 400; /窗体的高度 public static int Game_Height = 500;2. 创建一个蛇头类(Snakehead),在构造方法中来接收显示蛇头的面板和位置两个参数;有一个变量oldPoint来保存蛇头移动前的位置, 有一个init()方法来初始化蛇头,一个move()方法来进行蛇头的移动。具体代码: class Snakehead Panel panel; Button head; Point location; Point oldPoint; public Snakehead(Panel panel,Point location) this.panel = panel; this.location = location; oldPoint = new Point(); init(); public Button Head get return head; public Point OldPoint set oldPoint = value; get return oldPoint; /初始化蛇头 private void init() head = new Button(); head.Width = Global.Snake_Width; head.Height = Global.Snake_Height; head.Location = location; head.BackColor = Color.Blue; head.Visible = true; panel.Controls.Add(head); /蛇头的移动 public void move() oldPoint.X = head.Left; oldPoint.Y = head.Top; switch(Global.Snake_Dir) case Dircte.Up: head.Top -= head.Height; break; case Dircte.Down: head.Top += head.Height; break; case Dircte.Left: head.Left -= head.Width; break; case Dircte.Right: head.Left += head.Width; break; 3.创建一个蛇身类(Snakeblock),在构造方法中接受显示蛇身的面板;一个newPoint变量用来存放每节蛇身移动前的位置,一个blocks集合变量用来存放每一节蛇身;一个addSnake(Point oldPoint)方法来增长蛇身,其中接受一个点坐标来显示增长的蛇身的位置;一个move(Point oldPoint)方法来移动蛇身,其中接收一个点坐标来表示蛇身的第一个节点移动的坐标。具体代码: class Snakeblock Panel panel; List blocks = new List(); Point newPoint = new Point(); public Snakeblock(Panel panel) this.panel = panel; public List Blocks get return blocks; /增长蛇身 public void addSnake(Point oldPoint) Button block = new Button(); block.Width = Global.Snake_Width; block.Height = Global.Snake_Height; block.Location = oldPoi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论