欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android实现图片轮播效果的两种方法

程序员文章站 2023-12-13 19:07:28
大家在使用app的过程中,经常会看到上部banner图片轮播的效果,那么今天我们就一起来学习一下,android中图片轮询的几种实现方法: 第一种:使用动画的方法实现:(...

大家在使用app的过程中,经常会看到上部banner图片轮播的效果,那么今天我们就一起来学习一下,android中图片轮询的几种实现方法:

第一种:使用动画的方法实现:(代码繁琐)

这种发放需要:两个动画效果,一个布局,一个主类来实现,不多说了,来看代码吧:

public class iamgetractivity extends activity {
/** called when the activity is first created. */
public imageview imageview;
public imageview imageview2;
public animation animation1;
public animation animation2;
public textview text;
public boolean juage = true;
public int images[] = new int[] { r.drawable.icon, r.drawable.expriment,
r.drawable.changer, r.drawable.dataline, r.drawable.preffitication };
public int count = 0;
public handler handler = new handler();
public runnable runnable = new runnable() {
@override
public void run() {
// todo auto-generated method stub
animationset animationset1 = new animationset(true);
animationset animationset2 = new animationset(true);
imageview2.setvisibility(0);
translateanimation ta = new translateanimation(
animation.relative_to_self, 0f, animation.relative_to_self,
-1f, animation.relative_to_self, 0f,
animation.relative_to_self, 0f);
ta.setduration(2000);
animationset1.addanimation(ta);
animationset1.setfillafter(true);
ta = new translateanimation(animation.relative_to_self, 1.0f,
animation.relative_to_self, 0f, animation.relative_to_self,
0f, animation.relative_to_self, 0f);
ta.setduration(2000);
animationset2.addanimation(ta);
animationset2.setfillafter(true);
//iamgeview 出去 imageview2 进来
imageview.startanimation(animationset1);
imageview2.startanimation(animationset2);
imageview.setbackgroundresource(images[count % 5]);
count++;
imageview2.setbackgroundresource(images[count % 5]);
text.settext(string.valueof(count));
if (juage)
handler.postdelayed(runnable, 6000);
log.i(handler, handler);
}
};
@override
public void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
setcontentview(r.layout.main);
imageview = (imageview) findviewbyid(r.id.imageview);
imageview2 = (imageview) findviewbyid(r.id.imageview2);
text=(textview)findviewbyid(r.id.text);
text.settext(string.valueof(count));
//将iamgeview先隐藏,然后显示
imageview2.setvisibility(4);
handler.postdelayed(runnable, 2000);
}
public void onpause() {
juage = false;
super.onpause();
}
}

布局代码:

android:orientation=vertical
android:layout_width=fill_parent
android:layout_height=fill_parent
android:id=@+id/rl>
android:id=@+id/imageview
android:layout_width=fill_parent
android:background=@drawable/icon
android:layout_below=@+id/rl
android:layout_height=120dp />
android:id=@+id/imageview2
android:layout_width=fill_parent
android:background=@drawable/expriment
android:layout_below=@+id/rl
android:layout_height=120dp />
android:id=@+id/text
android:layout_width=fill_parent
android:layout_height=wrap_content
android:layout_below=@id/imageview/>

 第二种:使用viewflipper实现图片的轮播

android系统自带的一个多页面管理控件,它可以实现子界面的自动切换:

首先 需要为viewflipper加入view

(1) 静态导入:在layout布局文件中直接导入

(2) 动态导入:addview()方法

viewplipper常用方法:

setinanimation:设置view进入屏幕时候使用的动画

setoutanimation:设置view退出屏幕时候使用的动画

shownext:调用该函数来显示viewflipper里面的下一个view

showprevious:调用该函数来显示viewflipper里面的上一个view

setflipinterval:设置view之间切换的时间间隔

startflipping使用上面设置的时间间隔来开始切换所有的view,切换会循环进行

stopflipping:停止view切换

讲了这么多,那么我们今天要实现的是什么呢?

(1) 利用viewflipper实现图片的轮播

(2) 支持手势滑动的viewflipper

我们需要先准备几张图片:把图片放进drawable中

创建两个动画:在res下面新建一个folder里面新建两个xml:

left_in:
android:duration=5000
android:fromxdelta=100%p
android:toxdelta=0/>
left_out:
android:fromxdelta=0
android:toxdelta=-100%p
android:duration=5000/>

一个布局文件:

xmlns:tools=http://schemas.android.com/tools
android:layout_width=match_parent
android:layout_height=match_parent
tools:context=.mainactivity >
android:id=@+id/flipper
android:layout_width=fill_parent
android:layout_height=fill_parent/>

一个主类:

public class mainactivity extends activity {
private viewflipper flipper;
private int[] resid = {r.drawable.pc1,r.drawable.pc2,r.drawable.pc3,r.drawable.pc4};
@override
protected void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
setcontentview(r.layout.activity_main);
flipper = (viewflipper) findviewbyid(r.id.flipper);
/*
* 动态导入的方式为viewflipper加入子view
* */
for (int i = 0; i < resid.length; i++) {
flipper.addview(getimageview(resid[i]));
}
/*
* 为viewflipper去添加动画效果
* */
flipper.setinanimation(this, r.anim.left_in);
flipper.setoutanimation(this, r.anim.left_out);
flipper.setflipinterval(5000);
flipper.startflipping();
}
private imageview getimageview(int resid){
imageview image = new imageview(this);
image.setbackgroundresource(resid);
return image;
}
}

那么这样就实现了一个图片轮询的功能效果了

我们还可以添加点击,滑动效果:

我们还需要添加两个向右的滑动效果:

right_in:
android:fromxdelta=0
android:toxdelta=-100%p
android:duration=2000/>
right_out:
android:fromxdelta=100%p
android:toxdelta=0
android:duration=2000/>

然后我们还需要在主类里面添加(如果你不想让图片自动播放,只想通过手势来实现图片播放那么你需要把“为viewflipper添加动画效果的代码”删掉):

publibooleaontouchevent(motionevenevent{
/todauto-generatemethostub
switc(event.getaction(){
casmotionevent.action_down:
startevent.getx();
break;
casmotionevent.action_move://判断向左滑动还是向右滑动
i(event.getx(start100{
flipper.setinanimation(thisr.anim.left_in);
flipper.setoutanimation(thisr.anim.left_out);
flipper.showprevious();
}elsi(startevent.getx(100{
flipper.setinanimation(thisr.anim.right_in);
flipper.setoutanimation(thisr.anim.right_out);
flipper.shownext();
}
casmotionevent.action_up:
break;
}
retursuper.ontouchevent(event);
}

这样我们利用我们的viewflipper完成的图片轮询的功能就做完了。

以上所述是小编给大家分享的android实现图片轮播效果的两种方法,希望大家喜欢。

上一篇:

下一篇: