android Viewpage 无限循环播放
2016-02-22 18:55
459 查看
如题,研究了老半天,最后终于搞定了,先贴上自己的代码!
xml代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<RelativeLayout
android:id="@+id/rl_advert_view"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<com.gaodun.faq.jazzyview.JazzyViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/jazzy_pager"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<LinearLayout
android:id="@+id/ll_point_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="10dp"
android:layout_marginRight="10dp"
android:orientation="horizontal" >
</LinearLayout>
</RelativeLayout>
</LinearLayout>
如上代码是自定义的广告banner,大部分代码都是初始化数据的代码,
请看主要代码 PdAdapter,
首先添加这一句:
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
是的viewpage可以无限轮播;
其次修改初始化方法和destroyItem方法:
@Override
public Object instantiateItem(ViewGroup container, final int position) {
if (listViews.get(position % listViews.size()).getParent() != null) {
((ViewPager) container).removeView(listViews.get(position % listViews.size()));
}
((ViewPager) container).addView(listViews.get(position % listViews.size()), 0);
return listViews.get(position % listViews.size());
}
@Override
public void destroyItem(ViewGroup container, int position, Object obj) {
}destroyItem方法不要放remove的操作,不然滑动的时候会有空白页出现,instantiateItem方法用取于的方法;
这样写完后,碰到了一个问题,播放的时候,界面会卡死,当时切换广告页的方法用的是,handler.sendEmptyMessageDelayed,
后来换成了handler.postDelayed,使用了 runnable 来更新UI 就没有这个问题了;
真是神奇的代码!
package com.gaodun.faq.view; import java.util.ArrayList; import java.util.List; import com.bumptech.glide.Glide; import com.gaodun.common.pub.Global; import com.gaodun.common.pub.MyLog; import com.gaodun.faq.adapter.FaqControl; import com.gaodun.faq.jazzyview.JazzyViewPager; import com.gaodun.faq.jazzyview.JazzyViewPager.TransitionEffect; import com.gaodun.faq.model.AdvertModel; import com.gaodun.faq.model.Faq; import com.gdwx.dayicpa.FaqActivity; import com.gdwx.dayicpa.MainActivity; import com.gdwx.dayicpa.R; import com.gdwx.dayicpa.WebViewActivity; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Handler; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; public final class AdvertView extends LinearLayout implements OnPageChangeListener { /** 直播默认图片 */ public final static String DEF_ADVER = "http://api.gaodun.com/Public/images/default_1.jpg"; private final static int PAGE_CHANGE_TIME = 4000;// 广告切换时间 public View view; private Context context; private View rlAdverView; /* 广告 */ private static JazzyViewPager mJazzy;// 广告滑动 private Handler handler;// 设置自动滑动的handler /** 广告的位置点 */ private List<ImageView> imgList; private List<LinearLayout> listViews; private PdAdapter adAdapter; private LinearLayout mLayoutInflater; private Runnable scrollRunnable = new Runnable() { @Override public void run() { if (mJazzy != null) { mJazzy.setCurrentItem(mJazzy.getCurrentItem() + 1); handler.postDelayed(scrollRunnable, PAGE_CHANGE_TIME); } } }; public AdvertView(Context context) { super(context); this.context = context; init(); } public AdvertView(Context context, AttributeSet attrs) { super(context, attrs); this.context = context; init(); } private final void init() { view = LayoutInflater.from(getContext()).inflate(R.layout.item_header_firstfragment, null); rlAdverView = view.findViewById(R.id.rl_advert_view); rlAdverView.getLayoutParams().height = (int) (101 * Global.DeviceScale); rlAdverView.requestLayout(); imgList = new ArrayList<ImageView>(); handler = new Handler(); } private void sendScrollMessage() { if (handler != null) { handler.removeCallbacks(scrollRunnable); handler.postDelayed(scrollRunnable, PAGE_CHANGE_TIME); } } // 广告view public void initAdView(List<AdvertModel> list) { if (list.size() == 0) {// 添加默认广告 AdvertModel ad = new AdvertModel(); ad.setAdvertUrl(""); ad.setPicUrl(null); ad.setType("-1"); list.add(ad); } addAdvertViews(list); setAdvertChangePoint(list.size()); adAdapter = new PdAdapter(); mJazzy = (JazzyViewPager) view.findViewById(R.id.jazzy_pager); mJazzy.setTransitionEffect(TransitionEffect.CubeOut);// 手风琴 mJazzy.setAdapter(adAdapter); mJazzy.setPageMargin(30); mJazzy.setOnPageChangeListener(this); sendScrollMessage(); } private void setAdvertChangePoint(int adCounts) { // 广告页却换的点 imgList.clear(); LinearLayout pointView = (LinearLayout) view.findViewById(R.id.ll_point_view); if (adCounts > 1) { pointView.setVisibility(View.VISIBLE); pointView.removeAllViews(); for (int i = 0; i < adCounts; i++) { ImageView img = new ImageView(this.getContext()); img.setImageResource(R.drawable.bannerdll); imgList.add(img); pointView.addView(img); } } else { pointView.setVisibility(View.GONE); } } private void addAdvertViews(List<AdvertModel> list) { listViews = new ArrayList<LinearLayout>(); for (int i = 0; i < list.size(); i++) { final AdvertModel adver = list.get(i); mLayoutInflater = (LinearLayout) LayoutInflater.from(this.getContext()).inflate(R.layout.ke_item_adv, null); ImageView advertImg = (ImageView) mLayoutInflater.getChildAt(0); advertImg.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_adv: int type = Integer.parseInt(adver.getType()); MyLog.e(type + ""); switch (type) { case 1: Intent i = new Intent(); i.putExtra(WebViewActivity.KEY_URL, adver.getAdvertUrl()); i.setClass(context, WebViewActivity.class); ((Activity) context).startActivity(i); break; case 2: Faq faq = new Faq(); long id = Long.parseLong(adver.getAdvertUrl()); faq.setId(id); FaqControl.getBrowseInstance().setBrowseFaq(faq); MainActivity.startMeByType(getContext(), FaqActivity.FM_FAQ_DETAILS, FaqActivity.class); break; } default: break; } } }); listViews.add(mLayoutInflater); Glide.with(getContext()).load(adver.getPicUrl()).placeholder(R.drawable.def_banner).into(advertImg); } } // 广告的pager private class PdAdapter extends PagerAdapter { @Override public Object instantiateItem(ViewGroup container, final int position) { if (listViews.get(position % listViews.size()).getParent() != null) { ((ViewPager) container).removeView(listViews.get(position % listViews.size())); } ((ViewPager) container).addView(listViews.get(position % listViews.size()), 0); return listViews.get(position % listViews.size()); } @Override public void destroyItem(ViewGroup container, int position, Object obj) { } @Override public int getCount() { return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(View view, Object obj) { return view == obj; } } @Override public void onPageScrollStateChanged(int arg0) { } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageSelected(int arg0) { int itemIndex = arg0 % listViews.size(); int imgPointSize = imgList.size(); if (imgPointSize > 1) { for (int i = 0; i < imgList.size(); i++) { imgList.get(i).setImageResource(R.drawable.bannerdll); } imgList.get(itemIndex).setImageResource(R.drawable.bannerdllcur); } } }
xml代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<RelativeLayout
android:id="@+id/rl_advert_view"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<com.gaodun.faq.jazzyview.JazzyViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/jazzy_pager"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<LinearLayout
android:id="@+id/ll_point_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="10dp"
android:layout_marginRight="10dp"
android:orientation="horizontal" >
</LinearLayout>
</RelativeLayout>
</LinearLayout>
如上代码是自定义的广告banner,大部分代码都是初始化数据的代码,
请看主要代码 PdAdapter,
首先添加这一句:
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
是的viewpage可以无限轮播;
其次修改初始化方法和destroyItem方法:
@Override
public Object instantiateItem(ViewGroup container, final int position) {
if (listViews.get(position % listViews.size()).getParent() != null) {
((ViewPager) container).removeView(listViews.get(position % listViews.size()));
}
((ViewPager) container).addView(listViews.get(position % listViews.size()), 0);
return listViews.get(position % listViews.size());
}
@Override
public void destroyItem(ViewGroup container, int position, Object obj) {
}destroyItem方法不要放remove的操作,不然滑动的时候会有空白页出现,instantiateItem方法用取于的方法;
这样写完后,碰到了一个问题,播放的时候,界面会卡死,当时切换广告页的方法用的是,handler.sendEmptyMessageDelayed,
后来换成了handler.postDelayed,使用了 runnable 来更新UI 就没有这个问题了;
真是神奇的代码!
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法