已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
代码结构图 首先来看Demo中view包下面的ImageSwitcher1.java,这个DEMO实现的效果就是在Activity下面有一个小的图片索引列表,用鼠标点击列表中任意一个图片便可以对该图片进行显示,在每次显示图片的时候总有一个渐变的动画效果。首先来看下它的布局文件: 在这个布局文件里,外层的大的RelativeLayout包含了两个控件:分别是ImageSwithcer和Gallery。ImageSwithcer是用来图片显示那块区域的控件,Gallery是来控制底下那个图标索引列表索引用的。 在ImageSwitcher1.java中,requestWindowFeature(Window.FEATURE_NO_TITLE)是使得这个Activity没有标题栏,进而这个图片显示区域会增大。Gallery这个类和ListView这个类用起来差不多,也是要利用setAdapter来进行资源的设置。这里对BaseAdapter进行了封装,这里通过getView这个函数来返回要显示的那个ImageView的。如下所示: public View getView(int position, View convertView, ViewGroup parent) ImageView i = new ImageView(mContext); i.setImageResource(mThumbIdsposition); i.setAdjustViewBounds(true); i.setLayoutParams(new Gallery.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); i.setBackgroundResource(R.drawable.picture_frame); return i; getView方法里动态生成一个ImageView,然后利用setLayoutParams,setImageResource和setBackgroundResource分别设定要图片大小,图片源文件和图片背景。当图片被显示到当前屏幕的时候这个函数就会被自动回调来提供要显示的ImageView。下面就来说说ImageSwitcher,在ImageSwitcher1中实现了ViewSwitcher.ViewFactory这个接口,这个接口里有个方法makeView,来看下这个方法: public View makeView() ImageView i = new ImageView(this); i.setBackgroundColor(0xFF000000); i.setScaleType(ImageView.ScaleType.FIT_CENTER); i.setLayoutParams(new ImageSwitcher.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); return i; 这个方法为ImageSwitcher返回了一个View。ImageSwitcher调用过程是这样的,首先要有一个Factory为它提供一个View,然后ImageSwitcher就可以初始化各种资源了。 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); 注意在使用一个ImageSwitcher之前,一定要调用setFactory方法,要不setImageResource这个方法会报空指针异常。ImageSwitcher的切换效果就是由上面最后两句实现的,这里的setInAnimation是资源被读入到这个ImageSwitcher的时候动画,setOutAnimation是资源文件从这个ImageSwitcher里消失的时候要实现的动画效果,这里所有的动画都是从android.R系统文件里读取的。 mThumbIds:小图数组 mImageIds:大图数组 这段代码实现了当在Gallery区域选中一张图片后,相应的在ImageSwitcher区域显示相应的大图. public View getView(int position, View convertView, ViewGroup parent) ImageView i = new ImageView(mContext); i.setImageResource(mThumbIdsposition); i.setAdjustViewBounds(true); i.setLayoutParams(new Gallery.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); i.setBackgroundResource(R.drawable.picture_frame); return i; 注意:其中i.setBackgroundResource(R.drawable.picture_frame);这句代码是设置背景图片资源。 picture_frame如何在android中实现swipe的手势功能及页面拖动动画iPhone界面解锁是用手指划动来实现的, 那么这个手势gesture在android里如何实现呢? Android SDK提供了一个listener类来侦测各种不同的手势: SimpleOnGestureListener.你只需要实现自己所关心的手势就可以了. Swipe在android里面是叫Fling _ 首先创建自己的一个手势detector类:Java代码1. class MyGestureDetector extends SimpleOnGestureListener 2. Override 3. public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) 4. class MyGestureDetector extends SimpleOnGestureListener Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) 一个划动的手势有几个特征, 比如是在x或者y轴上近乎直线的划动, 中途路径的偏差不能太大, 而且划动需要一定的速度, 所以我们定义几个定量: Java代码 1. private static final int SWIPE_MIN_DISTANCE = 120; 2. private static final int SWIPE_MAX_OFF_PATH = 250; 3. private static final int SWIPE_THRESHOLD_VELOCITY = 200;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;然后在onFling方法中, 判断是不是一个合理的swipe动作: Java代码 1. if(e1.getX() - e2.getX() SWIPE_MIN_DISTANCE & Math.abs(velocityX) SWIPE_THRESHOLD_VELOCITY) 2. viewFlipper.setInAnimation(slideLeftIn); 3. viewFlipper.setOutAnimation(slideLeftOut); 4. viewFlipper.showNext(); 5. else if (e2.getX() - e1.getX() SWIPE_MIN_DISTANCE & Math.abs(velocityX) SWIPE_THRESHOLD_VELOCITY) 6. viewFlipper.setInAnimation(slideRightIn); 7. viewFlipper.setOutAnimation(slideRightOut); 8. viewFlipper.showPrevious(); 9. if(e1.getX() - e2.getX() SWIPE_MIN_DISTANCE & Math.abs(velocityX) SWIPE_THRESHOLD_VELOCITY) viewFlipper.setInAnimation(slideLeftIn);viewFlipper.setOutAnimation(slideLeftOut);viewFlipper.showNext(); else if (e2.getX() - e1.getX() SWIPE_MIN_DISTANCE & Math.abs(velocityX) SWIPE_THRESHOLD_VELOCITY) viewFlipper.setInAnimation(slideRightIn);viewFlipper.setOutAnimation(slideRightOut);viewFlipper.showPrevious();这里的viewFlipper是含有多个view的一个container, 可以很方便的调用prev/next view, 加上animation动画, 可以达到一些不错的效果: Java代码 1. viewFlipper = (ViewFlipper)findViewById(R.id.flipper); 2. slideLeftIn = AnimationUtils.loadAnimation(this, R.anim.slide_left_in); 3. slideLeftOut = AnimationUtils.loadAnimation(this, R.anim.slide_left_out); 4. slideRightIn = AnimationUtils.loadAnimation(this, R.anim.slide_right_in); 5. slideRightOut = AnimationUtils.loadAnimation(this, R.anim.slide_right_out);viewFlipper = (ViewFlipper)findViewById(R.id.flipper); slideLeftIn = AnimationUtils.loadAnimation(this, R.anim.slide_left_in); slideLeftOut = AnimationUtils.loadAnimation(this, R.anim.slide_left_out); slideRightIn = AnimationUtils.loadAnimation(this, R.anim.slide_right_in); slideRightOut = AnimationUtils.loadAnimation(this, R.anim.slide_right_out);自定义的animation可以查看具体的XML, 比如从左边进来的一个动画: Xml代码 1. 2. 3. 当然最后不要忘记在你的Activity中override onTouch方法来获取手势action: Java代码 1. Overri
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 个人信息守秘声明承诺书3篇范文
- 合同审查标准格式化工具
- 业务谈判沟通技巧及议程安排指南模板
- 合同条款约定履行承诺书4篇
- 我的语文课本人物描写14篇
- 产品质量可靠与来源合法保证承诺书3篇范文
- 生态保护治理领域承诺函(6篇)
- 2024年9月建筑塔式起重机司机试题库与参考答案
- 跨行业项目风险评估与应对措施模板
- 企业文件归档通则模版
- 简单雇佣合同协议书范文模板
- 经皮肺动脉去神经术治疗肺动脉高压的中国专家建议
- GB/T 41782.4-2024物联网系统互操作性第4部分:语法互操作性
- 超星尔雅学习通《舌尖上的植物学(北京大学)》2024章节测试答案
- 如果历史是一群喵
- 刑事侦查大队技术中队
- 病理科科室质量与安全管理自核查记录表
- 宫腔镜检查的个案护理
- 可赛成功(浙江)新材料科技有限公司年产高性能润滑改性材料5万吨建设项目环境影响报告
- 基层市场监督管理局(所)标准化规范化-市场监督管理所
- 全套ISO45001职业健康安全管理体系文件(手册及程序文件)
评论
0/150
提交评论