为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

android图片浏览器的开发

2018-02-28 23页 doc 154KB 30阅读

用户头像

is_005190

暂无简介

举报
android图片浏览器的开发android图片浏览器的开发 Shanghai Dianji University 课程设计报告 课程名称: 嵌入式系统设计与运用 姓 名: 班级学号: 指导教师: 完成日期: 2011-6-9 电 子 信 息 学 院 Electronic Information School 2011年 6月 2 嵌入式系统与运用课程设计 目录 目录 ....................................................................................
android图片浏览器的开发
android图片浏览器的开发 Shanghai Dianji University 课程 课程名称: 嵌入式系统设计与运用 姓 名: 班级学号: 指导教师: 完成日期: 2011-6-9 电 子 信 息 学 院 Electronic Information School 2011年 6月 2 嵌入式系统与运用课程设计 目录 目录 ........................................................................................................................................................... 1 一、课程设计目的 ................................................................................................................................... 3 二、课程设计要求 ................................................................................................................................... 3 三、相关知识 ........................................................................................................................................... 3 3.1 Android系统介绍 ............................................................................................................................... 3 3.2 如何搭建Android开发环境 ............................................................................................................. 3 3.3 Android程序APK包的构成 ............................................................................................................. 4 3.4 Activity、常见控件、常见布局方式、Intent ................................................................................... 4 四、课程设计 ................................................................................................................................... 6 4.1 程序介绍 ............................................................................................................................................ 6 4.2编程思路 ............................................................................................................................................. 6 五、程序相关代码及截图 ....................................................................................................................... 8 五、程序相关代码及截图 ....................................................................................................................... 9 5.1程序代码: ......................................................................................................................................... 9 5.2程序运行截图: ............................................................................................................................... 13 六、课程设计小结 ................................................................................................................................. 15 2 3 嵌入式系统与运用课程设计 一、课程设计目的 通过本次课程设计,了解Android手机系统平台的基本情况。学习Android开发环境的建立、android程序的编写以及调试。通过编写实例程序,学习Activity的基本概念以及编写,了解Android几个控件的创建以及调用方法。了解Android系统基本组成以及复习JAVA语言的相关知识。 二、课程设计要求 1.掌握Android开发环境的安装与程序调试。 2.了解Android系统的基本概念与组成。 3.学习Android程序开发的基本方法包括Activity、Intent的基本概念以及系统控件与布局文件的创建与使用。 4.自拟目利用以上知识点完成一个实例程序。 三、相关知识 3.1 Android系统介绍 Android是基于Linux开放性内核的操作系统,是Google公司在2007年11月5日公布的手机操作系统。 早期由原名为"Android"的公司开发,谷歌在2005年收购"Android.Inc"后,继续进行对Android系统开发运营,它采用了软件堆层(software stack,又名软件叠层)的架构,主要分为三部分。底层Linux内核只提供基本功能,其他的应用软件则由各公司自行开发,部分程序以Java编写。 2011年初数据显示,仅正式上市两年的操作系统Android已经超越称霸十年的塞班系统,使之跃居全球最受欢迎的智能手机平台。现在,Android系统不但应用于智能手机,也在平板电脑市场急速扩张。采用Android系统主要厂商包括台湾的HTC,(第一台谷歌的手机G1由HTC生产代工)美国摩托罗拉,SE等,中国大陆厂商如:华为、中兴、联想等 3.2 如何搭建Android开发环境 1.下载Android SDK 将SDK的目录添加到Windows的path环境变量中 2.下载JDK6 下载并安装Java开发包。 3.下载Eclipse3.5.2 3 4 嵌入式系统与运用课程设计 4.下载Eclipse的Android ADT插件 启动Eclipse,选择【Help】 > 【Soft Updates】 > 【Find and Install„】 选择“Available Software”标签页,点击【Add Site„】按键。添加update站点:这时窗口中新增了;项,选中该项,点击【Install„】按键即可下载。 或者到Android官网去下载这个ADT插件: 下载完成后解压,将“features”和“plugins”目录中的文件拷贝到Eclipse的对应目录中就可以了。 5.重启Eclipse,进行Android SDK设置: 选择【Windows】 > 【Preferences„】打开编辑属性窗口 选择Android属性面板 加入Android SDK的目录(点击【Browse„】进行选择,这里是“android-sdk-windows-1.0_r1”所在的目录)。 3.3 Android程序APK包的构成 一般情况下Android应用程序是由以下四种组件构造而成的: 1.Activity 活动 2.Broadcast Intent Reciver 广播接收器 3.Service 服务 4.Content Provider 内容提供器 需要注意的是,并不是每个Andorid应用程序都必须构建这4个组件,有些可能由这些组件的组合而成。一旦你确定了你的应用程序中需要的组件,那么你就应该在AndroidManifest.xml中列出他们。 这是一个XML配置文件,它用于定义应用程序中需要的组件、组件的功能及必要条件等。这个文件是必须的。 3.4 Activity、常见控件、常见布局方式、Intent Activity: Activity是最基本的Andorid应用程序组件,应用程序中,一个Activity通常就是一个单独的屏幕。每一个Activity都被实现为一个独立的类,并且从Activity基类中继承而来, Activity类将会显示由视图控件组成的用户接口,并对事件做出响应。 大多数的应用是由多屏幕显示组成。当打开一个新的屏幕时,之前一个屏幕会被置为暂停状态并且压入历史堆栈中。用户可以通过回退回到以前打开过的屏幕。我们可以选择性的移除一些没有必要保留的屏幕,因为Android会把每个从桌面打开的程序保留在堆栈中 4 5 嵌入式系统与运用课程设计 常见控件: TextView - 文本显示控件 Button - 按钮控件 ImageButton - 图片按钮控件 ImageView - 图片显示控件 CheckBox - 复选框控件 RadioButton - 单选框控件 AnalogClock - 钟表(带表盘的那种)控件 DigitalClock - 电子表控件 常见布局方式: 1.帧布局 FrameLayout: 是最简单的一个布局对象。在他里面的的所有显示对象爱你过都将固定在屏幕的左上角,不能指定位置,但允许有多个显示对象,只是后一个会直接覆盖在前一个之上显示,会把前面的组件部分或全部挡住。 android:layout_width=”wrap_content” android:layout_height=”wrap_content”> 2.线性布局 LinearLayout: 线性布局是所有布局中最常用的类之一,也是RadioGroup, TabWidget, TableLayout, TableRow, ZoomControls类的父类。LinearLayout可以让它的子元素垂直或水平的方式排成一行(不设置方向的时候默认按照垂直方向排列)。 3.绝对布局 AbsoluteLayout 绝对定位AbsoluteLayout,又可以叫做坐标布局,可以直接指定子元素的绝对位置,这种布局简单直接,直观性强,但是由于手机屏幕尺寸差别比较大,使用绝对定位的适应性会比较差。分辨率不一样的屏幕,显示的位置也会有所不同。 4.相对布局 RelativeLayout 相对布局 RelativeLayout 允许子元素指定它们相对于其父元素或兄弟元素的位置,这是实际布局中最常用的布局方式之一。它灵活性大很多,当然属性也多,操作难度也大,属性之间产生冲突的的可能性也大,使用相对布局时要多做些测试。 Intent: 在一个Android应用中,主要是由Activity、Broadcast Intent Reciver、Service、Content Provider组成的。而这四种组件是独立的,它们之间可以互相调用,协调工作,最终组成一个真正的Android应用。在这些组件之间的通讯中,主要是由Intent协助完成的。 Intent 负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。 因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。 5 6 嵌入式系统与运用课程设计 四、课程设计分析 4.1 程序介绍 程序名称:图片浏览器 运行环境:Android1.6-2.3 “图片浏览器”是一款用于浏览图片的手机小程序,它的主要功能是,通过拖动图片列表的图片来实现图片的浏览功能。 4.2编程思路 第一步:选择API级别、创建项目 在开始开发本程序时首先要明确需要兼容的Android的系统版本,由于不同的Android系统版本所支持的API的等级不同。如果勾选的API版本太高将影响程序的兼容范围,很多低版本的Android设备可能无法使用本程序。如果勾选的API太低,有许多高级的控件以及方法将无法被调用,以至于无法实现程序的一些功能。所以正确的选择API级别非常重要。由于本程序比较简单,考虑到高版本兼容低版,所以API的最低兼容级别选择4。 第二步:建立Activity以及编写布局文件 本软件需要两个Activity来实现基本功能。第一个Activity用于欢迎界面(demo),用于提示用户的一些操作。第二个Activity(ImageSwitcher1)是供用户浏览图片。这个Activity用于整个程序功能比较简单,用到的控件主要是ViewFlipper,Gallery,以及ImageSwitcher等一些基本的控件,使用相对布局模式。 图4.1 6 7 嵌入式系统与运用课程设计 第三步:基本算法 一、重要方法 setAdapter(ListAdapter adapter):设置图片源 setImageResource(int):设置ImageView资源 setLayoutParams(ViewGroup.LayoutParams params) :设置显示布局图片(长宽适应屏幕大小) setBackgroundResource(int) :指定默认背景 setInAnimation(Context context, int resourceID) :设置View进入屏幕时候使用的动画 设置动画效果 在imageSwitcher控件中加入setOnItemSelectedListener事件实现图片的拖拉切换 第四步:图片拖拉过程的代码 if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) return false; // right to left swipe if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { mSwitcher.setInAnimation(slideLeftIn);//设置View进入屏幕时候使用的动画 mSwitcher.setOutAnimation(slideLeftOut); g_position++; if(g_position>mImageIds.length ) g_position = 0; if(0>g_position ) g_position = mImageIds.length; mSwitcher.setImageResource(mImageIds[g_position]); //viewFlipper.showNext(); } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 7 8 嵌入式系统与运用课程设计 mSwitcher.setInAnimation(slideRightIn); mSwitcher.setOutAnimation(slideRightOut); g_position--; if(0>g_position ) g_position = mImageIds.length; if(g_position>mImageIds.length ) g_position = 0; mSwitcher.setImageResource(mImageIds[g_position]); 第五步:软件流程图 主界面(demo Activity) 点击按钮 浏览界面 ImageSwitcher1 ( Activity) ImageSwitcher Gallery 显示 SimpleOnGestureListener 获得动作 获得图片 setOnItemSelectedListener 8 9 嵌入式系统与运用课程设计 五、程序相关代码及截图 5.1程序代码: 主界面 package com.demo; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class demo extends Activity implements OnClickListener{ /** Called when the activity is first created. */ private Button bt = null; private TextView aboutView =null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); bt = (Button)findViewById(R.id.bt); bt.setOnClickListener(this); bt.setText(R.string.start); } @Override public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub if(item.getItemId() == 1){ finish(); } if(item.getItemId() == 2){ aboutView = (TextView)findViewById(R.id.aboutView); aboutView.setText(R.string.abouttext); } return super.onOptionsItemSelected(item); } @Override public boolean onCreateOptionsMenu(Menu menu) { // TODO Auto-generated method stub menu.add(0, 1, 1, R.string.exit); menu.add(0, 2, 2, R.string.about); return super.onCreateOptionsMenu(menu); } public void onClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.bt: Intent intent = new Intent(this,com.demo.ImageSwitcher1.class); startActivity(intent); break; } } } 9 10 嵌入式系统与运用课程设计 浏览界面 package com.demo; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.GestureDetector; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.view.GestureDetector.SimpleOnGestureListener; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.Gallery; import android.widget.ImageSwitcher; import android.widget.ImageView; import android.widget.ViewFlipper; import android.widget.ViewSwitcher; import android.widget.Gallery.LayoutParams; public class ImageSwitcher1 extends Activity implements AdapterView.OnItemSelectedListener, ViewSwitcher.ViewFactory { private ImageSwitcher mSwitcher; private static final int SWIPE_MIN_DISTANCE = 120; private static final int SWIPE_MAX_OFF_PATH = 250; private static final int SWIPE_THRESHOLD_VELOCITY = 200; private Animation slideLeftIn; private Animation slideLeftOut; private Animation slideRightIn; private Animation slideRightOut; private ViewFlipper viewFlipper; private GestureDetector gestureDetector; View.OnTouchListener gestureListener; public int g_position = 0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.image_switcher_1); mSwitcher = (ImageSwitcher) findViewById(R.id.switcher); mSwitcher.setFactory(this); mSwitcher.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in)); mSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_out)); Gallery g = (Gallery) findViewById(R.id.gallery); g.setAdapter(new ImageAdapter(this));//设置图片源(小图片) g.setOnItemSelectedListener(this); //------------- viewFlipper = (ViewFlipper)findViewById(R.id.flipper); slideLeftIn = AnimationUtils.loadAnimation(this, R.anim.slide_left_in); slideLeftOut = AnimationUtils.loadAnimation(this, R.anim.slide_left_out); 10 11 嵌入式系统与运用课程设计 slideRightIn = AnimationUtils.loadAnimation(this, R.anim.slide_right_in); slideRightOut = AnimationUtils.loadAnimation(this, R.anim.slide_right_out); gestureDetector = new GestureDetector(new MyGestureDetector()); gestureListener = new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { if (gestureDetector.onTouchEvent(event)) { return true; } return false; } }; } public void onItemSelected(AdapterView parent, View v, int position, long id) { mSwitcher.setImageResource(mImageIds[position]); g_position = position; } public void onNothingSelected(AdapterView parent) { } public View makeView() { ImageView i = new ImageView(this); i.setBackgroundColor(0xFF000000); i.setScaleType(ImageView.ScaleType.FIT_CENTER);//把图片按比例扩大/缩小到View的宽度,居中显示 i.setLayoutParams(new ImageSwitcher.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));//布局参数设置 return i; } public class ImageAdapter extends BaseAdapter { private Context mContext;//图片源 public ImageAdapter(Context c) { //声明ImageAdapter mContext = c; } public int getCount() { //获取图片的个数 return mThumbIds.length; } public Object getItem(int position) { //获取图片在库中的位置 return position; } public long getItemId(int position) { //获取图片在库中的位置 return position; } public View getView(int position, View convertView, ViewGroup parent) { ImageView i = new ImageView(mContext); i.setImageResource(mThumbIds[position]); //设置ImageView资源 i.setAdjustViewBounds(true); i.setLayoutParams(new Gallery.LayoutParams( //设置显示布局图片(长宽适应屏幕大小) LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); i.setBackgroundResource(R.drawable.picture_frame); //指定默认背景 return i; } } 11 12 嵌入式系统与运用课程设计 class MyGestureDetector extends SimpleOnGestureListener { @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { try { if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) return false; // right to left swipe if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { mSwitcher.setInAnimation(slideLeftIn);//设置View进入屏幕时候使用的动画 mSwitcher.setOutAnimation(slideLeftOut); g_position++; if(g_position>mImageIds.length ) g_position = 0; if(0>g_position ) g_position = mImageIds.length; mSwitcher.setImageResource(mImageIds[g_position]); //viewFlipper.showNext(); } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { mSwitcher.setInAnimation(slideRightIn); mSwitcher.setOutAnimation(slideRightOut); g_position--; if(0>g_position ) g_position = mImageIds.length; if(g_position>mImageIds.length ) g_position = 0; mSwitcher.setImageResource(mImageIds[g_position]); //viewFlipper.showPrevious(); } } catch (Exception e) { // nothing } return false; } } @Override public boolean onTouchEvent(MotionEvent event) { if (gestureDetector.onTouchEvent(event)) return true; else return false; } private Integer[] mThumbIds = { R.drawable.sample_thumb_0, R.drawable.sample_thumb_1, R.drawable.sample_thumb_2, R.drawable.sample_thumb_3, R.drawable.sample_thumb_4, R.drawable.sample_thumb_5, R.drawable.sample_thumb_6, R.drawable.sample_thumb_7}; private Integer[] mImageIds = { R.drawable.sample_0, R.drawable.sample_1, R.drawable.sample_2, R.drawable.sample_3, R.drawable.sample_4, R.drawable.sample_5, R.drawable.sample_6, R.drawable.sample_7}; } 12 13 嵌入式系统与运用课程设计 5.2程序运行截图: 图1 开机界面 图2 点击MENU 13 14 嵌入式系统与运用课程设计 图3 点击关于 图4 点击“开始浏览”按钮 14 15 嵌入式系统与运用课程设计 六、课程设计小结 此次课程设计我们小组选择的课题是基于Android系统的图片浏览器的设计与开发。Android系统对于我来说还是十分的陌生,以前并没有接触过Android系统,对它是一无所知。为了进行此次的课程设计,自己在同学的帮助下在我自己的的电脑上面安装了Android系统以及Android手机系统软件开发平台,并且安装了eclipse,对图片浏览器程序进行开发和设计。通过本次的课程设计,我对于Android的安装以及Android开发环境的建立、android程序的编写有了很大的了解,并且通过使用eclipse以及Android手机系统平台对图片浏览器的开发使我学习了Activity的基本概念以及编写方法,了解Android几个控件的创建以及调用方法,了解Android系统基本组成以及复习JAVA语言的相关知识。 本次的程序开发应用的是Eclipse3.5.2,jdk1.6.0_07,以及android各个版本虚拟机和API(截图的虚拟机版本是1.6,API Level为4),整个工程一共涉及了两个Activity:显示主界面Activity(demo)、显示浏览界面的Activity(ImageSwitcher1),通过主界面的一个按钮(Button)“开始浏览”在两个Activity上进行跳转。主界面由TextView、Button、menu控件组成,采用LinearLayoutx线性布局,Button用来跳转到浏览界面,menu用来退出程序或者显示软件详情。 我主要是进行图片浏览器界面的Gallery以及ImageSwitcher的设计,ImageSwithcer是用来图片显示那块区域的控件,Gallery是来控制底下那个图标索引列表索引用的。Gallery是Android中的图片库控件,在中心锁定,水平显示列表的项,用反射机制来动态读取资源中的图片,是用来显示缩略图(进行图片选择)。ImageSwitcher是Android中控制图片展示效果的一个控件,在Windows 平台上要查看多张图片,最简单的办法就是通过 "Window 图片和传真查看器“在 ”下一张“ 和”上一张“之间切换,Android平台上可以通过 ImageSwitcher 类来实现这一效果。ImageSwitcher 类必须设置一个ViewFactory,主要用来将显示的图片和父窗口区分开来,因此需要实现ViewSwitcher.ViewFactory接口,通过makeView()方法来显示图片,这里会返回一个ImageView 对象,而方法 setImageResource用来指定图片资源,setImageURI(Uri uri)用来设置图片地址,setImageDrawable(Drawable drawable)用来绘制图片。总体上两个控件是通过setOnItemSelectedListener和SimpleOnGestureListener监听手指触摸的动作变化来判断,再进行图片数组选择并显示。 此次课设,自我感觉还是十分的辛苦,主要因为对于android系统的以及eclipse的不熟悉还有对于JAVA的不精通,上学期的java课程学习到的知识基本上忘记了许多,自己又重新翻开书本进行学习。 Android开发环境的搭建与基本的Helloworld程序调试是在同学的帮助之下完成的,耗时将近一天时间。然后又下载了许多关于android系统软件开发和控件使用的讲解视频,通过对视频的学习,以及网上的各种资料还有android和eclipse自带的系统帮助,最终还是完成了本次的课程设计,本次课程设计离不开我们小组各位成员的努力,虽然只是一个很简单的图片浏览器的设计和开发,界面以及功能等和正版的软件还有很大的差距,但是我们最终成功的设计出了软件,这是值得我们庆幸的,这意味着我们在软件开发的方面卖出了一小步。但是,我们还需要进行更加深入的学习,希望自己以后会有更多的实践的机会,同时在此也要谢谢老师的指导。 15
/
本文档为【android图片浏览器的开发】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索