android 广告轮播布局 实现轮播图功能 图片来源于url网络图片 求实现代码 谢谢

Android UI 实现广告 Banner 轮播效果,图片切换 - 为程序员服务
Android UI 实现广告 Banner 轮播效果,图片切换
android图片切换
本文主要来分享一个Android UI开发中实现广告Banner的轮播效果,因为Banner效果在Android应用中比较常见,所以我们也来尝试实现以下。下图是360影视大全的Android应用:
用红框框住的那个效果就是小巫今天要分享的,先来思考一下会用到什么控件?有什么用户体验?
控件我们可能一下子就可以想到的自然是ViewPager,没错!用到的就是ViewPager,那么它会有什么用户体验呢,它可能有以下几个体验:
1. 间隔不停的切换图片,指示器也跟着变
2. 点击图片可以跳转到指定的页面
如何实现?
布局开始着手
/BannerAutoScrollDemo/res/layout/banner.xml
&?xml version="1.0" encoding="utf-8"?&
&LinearLayout xmlns:="http://schemas..com/apk/res/"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" &
&FrameLayout
android:layout_width="match_parent"
android:layout_height="210dp" &
&android.support.v4.view.ViewPager
android:id="@+id/vp"
android:layout_width="match_parent"
android:layout_height="210dp" /&
&RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:background="@drawable/shadow_article" &
android:id="@+id/tv_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/author_layout"
android:layout_marginBottom="10dp"
android:layout_marginLeft="10dp"
android:maxLines="2"
android:text="3月4日"
android:textColor="@color/white"
android:textSize="18sp" /&
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/author_layout"
android:layout_marginBottom="10dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_toRightOf="@+id/tv_date"
android:maxLines="2"
android:text="我和令计划只是同姓"
android:textColor="@color/white"
android:textSize="18sp" /&
&RelativeLayout
android:id="@+id/author_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginLeft="10dp"
android:gravity="center_vertical"
android:paddingBottom="20dp" &
android:id="@+id/tv_pre"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="文章选题来自"
android:textColor="@color/white"
android:textSize="12sp" /&
android:id="@+id/tv_topic_from"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/tv_pre"
android:text="阿宅的"
android:textColor="@color/white"
android:textSize="12sp" /&
android:id="@+id/tv_topic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_toRightOf="@+id/tv_topic_from"
android:text="“我想知道令狐安和令计划有什么关系?”"
android:textColor="@color/white"
android:textSize="12sp" /&
&/RelativeLayout&
&/RelativeLayout&
&LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dip"
android:layout_gravity="bottom|center_horizontal"
android:layout_marginBottom="10dp"
android:gravity="center" &
android:id="@+id/v_dot0"
android:background="@drawable/dot_focused"
android:visibility="invisible" /&
android:id="@+id/v_dot1"
android:visibility="invisible"/&
android:id="@+id/v_dot2"
android:visibility="invisible"/&
android:id="@+id/v_dot3"
android:visibility="invisible"/&
android:id="@+id/v_dot4"
android:visibility="invisible" /&
&/LinearLayout&
&/FrameLayout&
&/LinearLayout&
一个ViewPager,下面五个指示点,注意每个点都有同样的样式,我们在style.xml中定义样式:
/BannerAutoScrollDemo/res/values/styles.xml
&style name="dot_style"&
&item name="android:layout_width"&5dip&/item&
&item name="android:layout_height"&5dip&/item&
&item name="android:background"&@drawable/dot_normal&/item&
&item name="android:layout_marginLeft"&1.5dip&/item&
&item name="android:layout_marginRight"&1.5dip&/item&
定义圆点图形资源
/BannerAutoScrollDemo/res/drawable/dot_normal.xml
&?xml version="1.0" encoding="utf-8"?&
&shape xmlns:android="/apk/res/android"
android:shape="oval" &
&solid android:color="#" /&
&corners android:radius="5dip" /&
/BannerAutoScrollDemo/res/drawable/dot_focused.xml
&?xml version="1.0" encoding="utf-8"?&
&shape xmlns:android="/apk/res/android"
android:shape="oval" &
&solid android:color="#aaFFFFFF" /&
&corners android:radius="5dip" /&
定义广告实体
/BannerAutoScrollDemo/src/com/xiaowu/banner/demo/AdDomain.java
package com.xiaowu.banner.
* 广告实体
* @author wwj_748
public class AdDomain {
private S // 广告id
private S // 日期
private S // 标题
private String topicF //选题来自
private S // 选题
private String imgU // 图片url
private boolean isAd; // 是否为广告
private String startT // 广告开始时间
private String endT // 广告结束时间
private String targetU // 目标url
priva // 是否可用
public String getId() {
public void setId(String id) {
public String getTitle() {
public void setTitle(String title) {
this.title =
public String getImgUrl() {
return imgU
public void setImgUrl(String imgUrl) {
this.imgUrl = imgU
public boolean isAd() {
return isAd;
public void setAd(boolean isAd) {
this.isAd = isAd;
public String getDate() {
public void setDate(String date) {
this.date =
public String getTopic() {
public void setTopic(String topic) {
this.topic =
public String getTopicFrom() {
return topicF
public void setTopicFrom(String topicFrom) {
this.topicFrom = topicF
public String getStartTime() {
return startT
public void setStartTime(String startTime) {
this.startTime = startT
public String getEndTime() {
return endT
public void setEndTime(String endTime) {
this.endTime = endT
public String getTargetUrl() {
return targetU
public void setTargetUrl(String targetUrl) {
this.targetUrl = targetU
public int getWidth() {
public void setWidth(int width) {
this.width =
public int getHeight() {
public void setHeight(int height) {
this.height =
public boolean isAvailable() {
public void setAvailable(boolean available) {
this.available =
实现切换逻辑
1. 定时切换
2. 切换图片
3. 切换标题
4. 切换指示器
定时切换用到一个类:ScheduledExecutorService
作用是定时执行任务,我们这里要做的定时任务是,2秒执行一次图片切换
private void startAd() {
scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
// 当Activity显示出来后,每两秒切换一次图片显示
scheduledExecutorService.scheduleAtFixedRate(new ScrollTask(), 1, 2,
TimeUnit.SECONDS);
定义子线程
private class ScrollTask implements Runnable {
public void run() {
synchronized (adViewPager) {
currentItem = (currentItem + 1) % imageViews.size();
handler.obtainMessage().sendToTarget();
通过handle来通知ViewPager进行视图切换
private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
adViewPager.setCurrentItem(currentItem);
我们提供模拟数据来进行测试
* 轮播广播模拟数据
public static List&AdDomain& getBannerAd() {
List&AdDomain& adList = new ArrayList&AdDomain&();
AdDomain adDomain = new AdDomain();
adDomain.setId("108078");
adDomain.setDate("3月4日");
adDomain.setTitle("我和令计划只是同姓");
adDomain.setTopicFrom("阿宅");
adDomain.setTopic("我想知道令狐安和令计划有什么关系?");
adDomain.setImgUrl("http://g./image/w%3D310/sign=bb99d6add2c8a786be2a4c0f/d50735fae6cd7bc0e29.jpg");
adDomain.setAd(false);
adList.add(adDomain);
AdDomain adDomain2 = new AdDomain();
adDomain2.setId("108078");
adDomain2.setDate("3月5日");
adDomain2.setTitle("我和令计划只是同姓");
adDomain2.setTopicFrom("小巫");
adDomain2.setTopic("“我想知道令狐安和令计划有什么关系?”");
.setImgUrl("http://g./image/w%3D310/sign=7cbcd7da78f40ad115e4c1e/eaf81a4c510fd9f9a1edb58b262dd42a2934a45e.jpg");
adDomain2.setAd(false);
adList.add(adDomain2);
AdDomain adDomain3 = new AdDomain();
adDomain3.setId("108078");
adDomain3.setDate("3月6日");
adDomain3.setTitle("我和令计划只是同姓");
adDomain3.setTopicFrom("旭东");
adDomain3.setTopic("“我想知道令狐安和令计划有什么关系?”");
.setImgUrl("http://e./image/w%3D310/sign=392ce7f88e3c/8718367adab44aed22a58aeeb11c8701a08bfbd4.jpg");
adDomain3.setAd(false);
adList.add(adDomain3);
AdDomain adDomain4 = new AdDomain();
adDomain4.setId("108078");
adDomain4.setDate("3月7日");
adDomain4.setTitle("我和令计划只是同姓");
adDomain4.setTopicFrom("小软");
adDomain4.setTopic("“我想知道令狐安和令计划有什么关系?”");
.setImgUrl("http://d./image/w%3D310/sign=f8c54e3d3c32e0a282dee/a686c932e4cfdf9dc55f2.jpg");
adDomain4.setAd(false);
adList.add(adDomain4);
AdDomain adDomain5 = new AdDomain();
adDomain5.setId("108078");
adDomain5.setDate("3月8日");
adDomain5.setTitle("我和令计划只是同姓");
adDomain5.setTopicFrom("大熊");
adDomain5.setTopic("“我想知道令狐安和令计划有什么关系?”");
.setImgUrl("http://e./image/w%3D310/sign=c4bfffd1e78/0bd162d9f2d3572c7dad11bad0c30d.jpg");
adDomain5.setAd(true); // 代表是广告
adList.add(adDomain5);
return adL
ViewPager逻辑处理
1. 填充数据(自定义Adapter)
2. 设置页面切换监听事件
3. 在自定义adapter中的instantiateItem方法设置ViewPager点击事件
这里我们的图片是从网上下载的,用到了universal-image-loader-1.8.6-with-sources.jar这个类库,可以实现异步加载图片,具体使用查看代码。
最后给出完整代码:
/BannerAutoScrollDemo/src/com/xiaowu/banner/demo/MainActivity.java
package com.xiaowu.banner.
import java.io.F
import java.util.ArrayL
import java.util.L
import java.util.concurrent.E
import java.util.concurrent.ScheduledExecutorS
import java.util.concurrent.TimeU
import android.app.A
import android.graphics.B
import android.os.B
import android.os.H
import android.os.P
import android.support.v4.view.PagerA
import android.support.v4.view.ViewP
import android.support.v4.view.ViewPager.OnPageChangeL
import android.view.V
import android.view.View.OnClickL
import android.view.ViewG
import android.widget.ImageV
import android.widget.ImageView.ScaleT
import android.widget.TextV
import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscC
import com.nostra13.universalimageloader.cache.memory.impl.LruMemoryC
import com.nostra13.universalimageloader.core.DisplayImageO
import com.nostra13.universalimageloader.core.ImageL
import com.nostra13.universalimageloader.core.ImageLoaderC
import com.nostra13.universalimageloader.core.assist.ImageScaleT
import com.nostra13.universalimageloader.core.assist.QueueProcessingT
public class MainActivity extends Activity {
public static String IMAGE_CACHE_PATH = "imageloader/Cache"; // 图片缓存路径
private ViewPager adViewP
private List&ImageView& imageV// 滑动的图片集合
private List&View& // 图片标题正文的那些点
private List&View& dotL
private TextView tv_
private TextView tv_
private TextView tv_topic_
private TextView tv_
private int currentItem = 0; // 当前图片的索引号
// 定义的五个指示点
private View dot0;
private View dot1;
private View dot2;
private View dot3;
private View dot4;
// 定时任务
private ScheduledExecutorService scheduledExecutorS
// 异步加载图片
private ImageLoader mImageL
private DisplayImageO
// 轮播banner的数据
private List&AdDomain& adL
private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
adViewPager.setCurrentItem(currentItem);
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 使用ImageLoader之前初始化
initImageLoader();
// 获取图片加载实例
mImageLoader = ImageLoader.getInstance();
options = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.top_banner_android)
.showImageForEmptyUri(R.drawable.top_banner_android)
.showImageOnFail(R.drawable.top_banner_android)
.cacheInMemory(true).cacheOnDisc(true)
.bitmapConfig(Bitmap.Config.RGB_565)
.imageScaleType(ImageScaleType.EXACTLY).build();
initAdData();
startAd();
* 初始化ImageLoader
private void initImageLoader() {
File cacheDir = com.nostra13.universalimageloader.utils.StorageUtils
.getOwnCacheDirectory(getApplicationContext(),
IMAGE_CACHE_PATH);
DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
.cacheInMemory(true).cacheOnDisc(true).build();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
this).defaultDisplayImageOptions(defaultOptions)
.memoryCache(new LruMemoryCache(12 * 1024 * 1024))
.memoryCacheSize(12 * 1024 * 1024)
.discCacheSize(32 * 1024 * 1024).discCacheFileCount(100)
.discCache(new UnlimitedDiscCache(cacheDir))
.threadPriority(Thread.NORM_PRIORITY - 2)
.tasksProcessingOrder(QueueProcessingType.LIFO).build();
ImageLoader.getInstance().init(config);
* 初始化广告数据
private void initAdData() {
// 广告数据
adList = getBannerAd();
imageViews = new ArrayList&ImageView&();
dots = new ArrayList&View&();
dotList = new ArrayList&View&();
dot0 = findViewById(R.id.v_dot0);
dot1 = findViewById(R.id.v_dot1);
dot2 = findViewById(R.id.v_dot2);
dot3 = findViewById(R.id.v_dot3);
dot4 = findViewById(R.id.v_dot4);
dots.add(dot0);
dots.add(dot1);
dots.add(dot2);
dots.add(dot3);
dots.add(dot4);
tv_date = (TextView) findViewById(R.id.tv_date);
tv_title = (TextView) findViewById(R.id.tv_title);
tv_topic_from = (TextView) findViewById(R.id.tv_topic_from);
tv_topic = (TextView) findViewById(R.id.tv_topic);
adViewPager = (ViewPager) findViewById(R.id.vp);
adViewPager.setAdapter(new MyAdapter());// 设置填充ViewPager页面的适配器
// 设置一个监听器,当ViewPager中的页面改变时调用
adViewPager.setOnPageChangeListener(new MyPageChangeListener());
addDynamicView();
private void addDynamicView() {
// 动态添加图片和下面指示的圆点
// 初始化图片资源
for (int i = 0; i & adList.size(); i++) {
ImageView imageView = new ImageView(this);
// 异步加载图片
mImageLoader.displayImage(adList.get(i).getImgUrl(), imageView,
imageView.setScaleType(ScaleType.CENTER_CROP);
imageViews.add(imageView);
dots.get(i).setVisibility(View.VISIBLE);
dotList.add(dots.get(i));
protected void onResume() {
super.onResume();
private void startAd() {
scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
// 当Activity显示出来后,每两秒切换一次图片显示
scheduledExecutorService.scheduleAtFixedRate(new ScrollTask(), 1, 2,
TimeUnit.SECONDS);
private class ScrollTask implements Runnable {
public void run() {
synchronized (adViewPager) {
currentItem = (currentItem + 1) % imageViews.size();
handler.obtainMessage().sendToTarget();
protected void onStop() {
super.onStop();
// 当Activity不可见的时候停止切换
scheduledExecutorService.shutdown();
private class MyPageChangeListener implements OnPageChangeListener {
private int oldPosition = 0;
public void onPageScrollStateChanged(int arg0) {
public void onPageScrolled(int arg0, float arg1, int arg2) {
public void onPageSelected(int position) {
currentItem =
AdDomain adDomain = adList.get(position);
tv_title.setText(adDomain.getTitle()); // 设置标题
tv_date.setText(adDomain.getDate());
tv_topic_from.setText(adDomain.getTopicFrom());
tv_topic.setText(adDomain.getTopic());
dots.get(oldPosition).setBackgroundResource(R.drawable.dot_normal);
dots.get(position).setBackgroundResource(R.drawable.dot_focused);
oldPosition =
private class MyAdapter extends PagerAdapter {
public int getCount() {
return adList.size();
public Object instantiateItem(ViewGroup container, int position) {
ImageView iv = imageViews.get(position);
((ViewPager) container).addView(iv);
final AdDomain adDomain = adList.get(position);
// 在这个方法里面设置图片的点击事件
iv.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 处理跳转逻辑
public void destroyItem(View arg0, int arg1, Object arg2) {
((ViewPager) arg0).removeView((View) arg2);
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
public void restoreState(Parcelable arg0, ClassLoader arg1) {
public Parcelable saveState() {
public void startUpdate(View arg0) {
public void finishUpdate(View arg0) {
* 轮播广播模拟数据
public static List&AdDomain& getBannerAd() {
List&AdDomain& adList = new ArrayList&AdDomain&();
AdDomain adDomain = new AdDomain();
adDomain.setId("108078");
adDomain.setDate("3月4日");
adDomain.setTitle("我和令计划只是同姓");
adDomain.setTopicFrom("阿宅");
adDomain.setTopic("我想知道令狐安和令计划有什么关系?");
adDomain.setImgUrl("http://g./image/w%3D310/sign=bb99d6add2c8a786be2a4c0f/d50735fae6cd7bc0e29.jpg");
adDomain.setAd(false);
adList.add(adDomain);
AdDomain adDomain2 = new AdDomain();
adDomain2.setId("108078");
adDomain2.setDate("3月5日");
adDomain2.setTitle("我和令计划只是同姓");
adDomain2.setTopicFrom("小巫");
adDomain2.setTopic("“我想知道令狐安和令计划有什么关系?”");
.setImgUrl("http://g./image/w%3D310/sign=7cbcd7da78f40ad115e4c1e/eaf81a4c510fd9f9a1edb58b262dd42a2934a45e.jpg");
adDomain2.setAd(false);
adList.add(adDomain2);
AdDomain adDomain3 = new AdDomain();
adDomain3.setId("108078");
adDomain3.setDate("3月6日");
adDomain3.setTitle("我和令计划只是同姓");
adDomain3.setTopicFrom("旭东");
adDomain3.setTopic("“我想知道令狐安和令计划有什么关系?”");
.setImgUrl("http://e./image/w%3D310/sign=392ce7f88e3c/8718367adab44aed22a58aeeb11c8701a08bfbd4.jpg");
adDomain3.setAd(false);
adList.add(adDomain3);
AdDomain adDomain4 = new AdDomain();
adDomain4.setId("108078");
adDomain4.setDate("3月7日");
adDomain4.setTitle("我和令计划只是同姓");
adDomain4.setTopicFrom("小软");
adDomain4.setTopic("“我想知道令狐安和令计划有什么关系?”");
.setImgUrl("http://d./image/w%3D310/sign=f8c54e3d3c32e0a282dee/a686c932e4cfdf9dc55f2.jpg");
adDomain4.setAd(false);
adList.add(adDomain4);
AdDomain adDomain5 = new AdDomain();
adDomain5.setId("108078");
adDomain5.setDate("3月8日");
adDomain5.setTitle("我和令计划只是同姓");
adDomain5.setTopicFrom("大熊");
adDomain5.setTopic("“我想知道令狐安和令计划有什么关系?”");
.setImgUrl("http://e./image/w%3D310/sign=c4bfffd1e78/0bd162d9f2d3572c7dad11bad0c30d.jpg");
adDomain5.setAd(true); // 代表是广告
adList.add(adDomain5);
return adL
源码下载地址 :
转载请注明: &
安度博客原创分享你值得拥有
原文地址:, 感谢原作者分享。
您可能感兴趣的代码大家在使用APP的过程中,经常会看到上部banner图片轮播的效果,那么今天我们就一起来学习一下,android中图片轮询的几种实现方法:第一种:使用动画的方法实现:(代码繁琐)这种发放需要:两个动画效果,一个布局,一个主类来实现,不多说了,来看代码吧:public class IamgeTrActivity extends Activity {/** Called when the activity is first created. */public ImageView imageVpublic ImageView imageView2;public Animation animation1;public Animation animation2;public TextVpublic boolean juage =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() {@Overridepublic void run() {// TODO Auto-generated method stubAnimationSet 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);}};@Overridepublic 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 =super.onPause();}}&布局代码: android:orientation=verticalandroid:layout_width=fill_parentandroid:layout_height=fill_parentandroid:id=@+id/rl& android:id=@+id/imageViewandroid:layout_width=fill_parentandroid:background=@drawable/iconandroid:layout_below=@+id/rlandroid:layout_height=120dp /& android:id=@+id/imageView2android:layout_width=fill_parentandroid:background=@drawable/exprimentandroid:layout_below=@+id/rlandroid:layout_height=120dp /& android:id=@+id/textandroid:layout_width=fill_parentandroid:layout_height=wrap_contentandroid:layout_below=@id/imageView/&&&第二种:使用ViewFlipper实现图片的轮播&Android系统自带的一个多页面管理控件,它可以实现子界面的自动切换:首先 需要为ViewFlipper加入View(1) 静态导入:在layout布局文件中直接导入(2) 动态导入:addView()方法ViewPlipper常用方法:setInAnimation:设置View进入屏幕时候使用的动画setOutAnimation:设置View退出屏幕时候使用的动画showNext:调用该函数来显示ViewFlipper里面的下一个ViewshowPrevious:调用该函数来显示ViewFlipper里面的上一个ViewsetFlipInterval:设置View之间切换的时间间隔startFlipping使用上面设置的时间间隔来开始切换所有的View,切换会循环进行stopFlipping:停止View切换讲了这么多,那么我们今天要实现的是什么呢?(1) 利用ViewFlipper实现图片的轮播(2) 支持手势滑动的ViewFlipper我们需要先准备几张图片:把图片放进drawable中创建两个动画:在res下面新建一个folder里面新建两个xml:left_in: android:duration=5000android:fromXDelta=100%pandroid:toXDelta=0/&&left_out: android:fromXDelta=0android:toXDelta=-100%pandroid:duration=5000/&&一个布局文件: xmlns:tools=/toolsandroid:layout_width=match_parentandroid:layout_height=match_parenttools:context=.MainActivity & android:id=@+id/flipperandroid:layout_width=fill_parentandroid:layout_height=fill_parent/&&一个主类:public class MainActivity extends Activity {private ViewFprivate int[] resId = {R.drawable.pc1,R.drawable.pc2,R.drawable.pc3,R.drawable.pc4};@Overrideprotected 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. 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);}}那么这样就实现了一个图片轮询的功能效果了我们还可以添加点击,滑动效果:我们还需要添加两个向右的滑动效果:right_in: android:fromXDelta=0android:toXDelta=-100%pandroid:duration=2000/&&right_out: android:fromXDelta=100%pandroid:toXDelta=0android:duration=2000/&&然后我们还需要在主类里面添加(如果你不想让图片自动播放,只想通过手势来实现图片播放那么你需要把&为ViewFlipper添加动画效果的代码&删掉):public boolean onTouchEvent(MotionEvent event) {// TODO Auto-generated method stubswitch (event.getAction()) {case MotionEvent.ACTION_DOWN:startX = event.getX();case MotionEvent.ACTION_MOVE://判断向左滑动还是向右滑动if (event.getX() - startX & 100) {flipper.setInAnimation(this, R.anim.left_in);flipper.setOutAnimation(this, R.anim.left_out);flipper.showPrevious();}else if (startX - event.getX() & 100) {flipper.setInAnimation(this, R.anim.right_in);flipper.setOutAnimation(this, R.anim.right_out);flipper.showNext();}case MotionEvent.ACTION_UP:}return super.onTouchEvent(event);}这样我们利用我们的ViewFlipper完成的图片轮询的功能就做完了。&

我要回帖

更多关于 android 广告轮播代码 的文章

 

随机推荐