android幻灯片效果自定义
来源:互联网 发布:wemall商业版源码 编辑:程序博客网 时间:2024/04/30 00:08
最近研究了下android系统下的幻灯片效果,考虑用控件ViewFlipper来实现这种动画效果,另外加上手势拖动随意切换图片,重写ViewAnimator的动画,使幻灯片随意如自己DIY的图像显示.
先定义一个测试数组int imageSource[],包含30副图(之所以这么多,是为解决后面可能碰到的内存溢出问题)
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
detector = new GestureDetector(this);
flipper=new ViewFlipper(this);
flipper.setBackgroundColor(Color.BLACK);
imageCount=imageSource.length-25;
addViewToFlipper();
setContentView(flipper);
startFlipping();
}
public void addViewToFlipper(){
for (int i = 0; i < imageCount; i++) {
flipper.addView(addMyView(imageSource[i],i));
}
}
/**
* 初始化要播放的图片资源
*/
public View addMyView(int id,int index){
ImageView imageView=new ImageView(this);
LinearLayout lin=new LinearLayout(this);
lin.setBackgroundResource(R.drawable.myfacebg);
LinearLayout.LayoutParams params=new LayoutParams
(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT );
lin.setOrientation(LinearLayout.VERTICAL);
Drawable draw;
draw=this.getResources().getDrawable(id);
imageView.setBackgroundDrawable(draw);
imageView.setLayoutParams(params);
lin.setGravity(Gravity.CENTER);
lin.addView(imageView);
return lin;
}
imageCount=imageSource.length-25,之所以要减去25是因为flipper一次不能装载过多图片,不然会抛出内存溢出异常,后面将解决如何将这30张图片都用幻灯片显示出来。
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case MENU_AOTOPLAY:
if (!mKeepFlipping) {
item.setTitle("停止播放");
startFlipping();
}
else{
item.setTitle("自动播放");
stopFlipping();
}
break;
case MENU_EXIT:
flipper.removeAllViews();
this.finish();
break;default:
break;
}
return super.onOptionsItemSelected(item);
}上面为播放和停止播放按钮,调用了重写的startFlipping()和stopFlipping()方法,之所以要重写是因为后面将为flipper显示图片自动加载剩余的资源文件:
/**
* 自动加载资源
*/
public void addViewExtra(){
if (!((imageCount+addCount)==30)) {
flipper.addView(addMyView(imageSource[imageCount+addCount],imageCount+addCount));
addCount++;
setContentView(flipper);
}
}
/**
* 自动卸载资源
*/
public void reduceViewExtra(){
if (!((imageCount+addCount)==30)) {
flipper.removeViewAt(0);
setContentView(flipper);
}
}上面自动加载资源如同listview一样拖动滚动栏下面即会自动加载下面的list列表项,只不过我这里加载是看不见的,全部处理是在内存中,但这种处理是犹为重要的,不然一次加载过多图片即出现异常。
/**
* 触屏事件动画
*/
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
if (e1.getX() - e2.getX() > 120) {
this.flipper.setInAnimation(AnimationUtils.loadAnimation(this,
R.anim.left_in));
this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this,
R.anim.left_out));
this.flipper.showNext();
addViewExtra();
reduceViewExtra();
return true;
} else if (e1.getX() - e2.getX() < -120) {
this.flipper.setInAnimation(AnimationUtils.loadAnimation(this,
R.anim.right_in));
this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this,
R.anim.right_out));
this.flipper.showPrevious();
return true;
} else if (e1.getY() - e2.getY() > 200) {
this.flipper.setInAnimation(AnimationUtils.loadAnimation(this,
R.anim.push_up_in));
this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this,
R.anim.push_up_out));
this.flipper.showNext();
Log.i("push up in","push up in");
addViewExtra();
reduceViewExtra();
return true;
} else if (e1.getY() - e2.getY() < -200) {
this.flipper.setInAnimation(AnimationUtils.loadAnimation(this,
R.anim.push_down_in));
this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this,
R.anim.push_down_out));
this.flipper.showPrevious();
return true;
}
return false;
}
这部分为继承自OnGestureListener接口的覆写方法,为拖动鼠标后图片的移动方式。动画可自己定义效果。目前在XML里定义的动画效果似乎只有2D的,3D效果在这里难以实现。如谁有3D实现,非常希望得到指点。
- android幻灯片效果自定义
- android 幻灯片效果之百叶窗
- android 幻灯片效果之平移
- 自定义ViewPager.PageTransformer实现幻灯片效果
- 幻灯片效果
- 幻灯片效果
- android 幻灯片效果之小方块渐入渐出
- Android Gesture手势操作(手势翻页效果)及幻灯片放映
- android图片左右滚动类似翻页切换幻灯片效果
- android实战项目六imageview做一个幻灯片效果
- android幻灯片
- 文字幻灯片交替效果
- javascript版幻灯片效果
- JavaScript版幻灯片效果
- JavaScript幻灯片效果
- 随机幻灯片图片效果
- javascript实现幻灯片效果
- 幻灯片效果 防新浪
- db2实例
- Android 对话框【Dialog】去除白色边框代码
- smartforms function module 保存在何处
- 关于lephone系统CM7 2.3.7 原生体验版修改的一些说明
- qt中定时器Timer的使用
- android幻灯片效果自定义
- 光线跟踪程序
- 用电脑做热点(ap) 共享其他设备上网
- 共享网络文件夹
- Delphi调试WEB程序(ISAPI或CGI)
- mysql分页
- js 上传下载(留着备用)
- OBJECT c tcp
- #pragma once与 #ifndef的区别