工具类:
package com.nngame.hnmj.utils;
import android.content.Context;
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.FrameLayout;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.LinearLayout;
import com.nngame.hnmj.R;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Administrator on 2017/3/6.
* 轮播工具,可以直接调
*/
public class LunBoUtils extends FrameLayout {
private int count;
private ImageLoader mImageLoader;
private List<ImageView> imageViews;
private Context context;
private ViewPager vp;
private boolean isAutoPlay;
private int currentItem;
private int delayTime;
private LinearLayout ll_dot;
private List<ImageView> iv_dots;
private Handler handler = new Handler();
private DisplayImageOptions options;
public LunBoUtils(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
this.context = context;
initImageLoader(context);
initData();
}
public LunBoUtils(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public LunBoUtils(Context context) {
this(context, null);
}
private void initData() {
imageViews = new ArrayList<ImageView>();
iv_dots = new ArrayList<ImageView>();
delayTime = 2000;
}
public void setImagesUrl(String[] imagesUrl) {
initLayout();
initImgFromNet(imagesUrl);
showTime();
}
public void setImagesRes(int[] imagesRes) {
initLayout();
initImgFromRes(imagesRes);
showTime();
}
private void initLayout() {
imageViews.clear();
View view = LayoutInflater.from(context).inflate(
R.layout.lunbo_layout, this, true);
vp = (ViewPager) view.findViewById(R.id.vp);
ll_dot = (LinearLayout) view.findViewById(R.id.ll_dot);
ll_dot.removeAllViews();
}
private void initImgFromRes(int[] imagesRes) {
count = imagesRes.length;
for (int i = 0; i < count; i++) {
ImageView iv_dot = new ImageView(context);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
params.leftMargin = 5;
params.rightMargin = 5;
iv_dot.setImageResource(R.drawable.dot_blur);
ll_dot.addView(iv_dot, params);
iv_dots.add(iv_dot);
}
iv_dots.get(0).setImageResource(R.drawable.dot_focus);
for (int i = 0; i <= count + 1; i++) {
ImageView iv = new ImageView(context);
iv.setScaleType(ScaleType.FIT_XY);
// iv.setBackgroundResource(R.drawable.loading);
if (i == 0) {
iv.setImageResource(imagesRes[count - 1]);
} else if (i == count + 1) {
iv.setImageResource(imagesRes[0]);
} else {
iv.setImageResource(imagesRes[i - 1]);
}
imageViews.add(iv);
}
}
private void initImgFromNet(String[] imagesUrl) {
count = imagesUrl.length;
for (int i = 0; i < count; i++) {
ImageView iv_dot = new ImageView(context);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
params.leftMargin = 5;
params.rightMargin = 5;
iv_dot.setImageResource(R.drawable.dot_blur);
ll_dot.addView(iv_dot, params);
iv_dots.add(iv_dot);
}
iv_dots.get(0).setImageResource(R.drawable.dot_focus);
for (int i = 0; i <= count + 1; i++) {
ImageView iv = new ImageView(context);
iv.setScaleType(ScaleType.FIT_XY);
// iv.setBackgroundResource(R.mipmap.loading);
if (i == 0) {
mImageLoader.displayImage(imagesUrl[count - 1], iv, options);
} else if (i == count + 1) {
mImageLoader.displayImage(imagesUrl[0], iv, options);
} else {
mImageLoader.displayImage(imagesUrl[i - 1], iv, options);
}
imageViews.add(iv);
}
}
private void showTime() {
vp.setAdapter(new KannerPagerAdapter());
vp.setFocusable(true);
vp.setCurrentItem(1);
currentItem = 1;
vp.addOnPageChangeListener(new MyOnPageChangeListener());
startPlay();
}
private void startPlay() {
isAutoPlay = true;
handler.postDelayed(task, 2000);
}
public void initImageLoader(Context context) {
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
context).threadPriority(Thread.NORM_PRIORITY - 2)
.denyCacheImageMultipleSizesInMemory()
.diskCacheFileNameGenerator(new Md5FileNameGenerator())
.tasksProcessingOrder(QueueProcessingType.LIFO)
.writeDebugLogs().build();
ImageLoader.getInstance().init(config);
options = new DisplayImageOptions.Builder()
.cacheInMemory(true)
.cacheOnDisk(true)
.build();
mImageLoader = ImageLoader.getInstance();
}
private final Runnable task = new Runnable() {
@Override
public void run() {
if (isAutoPlay) {
currentItem = currentItem % (count + 1) + 1;
if (currentItem == 1) {
vp.setCurrentItem(currentItem, false);
handler.post(task);
} else {
vp.setCurrentItem(currentItem);
handler.postDelayed(task, 3000);
}
} else {
handler.postDelayed(task, 5000);
}
}
};
class KannerPagerAdapter extends PagerAdapter {
@Override
public int getCount() {
return imageViews.size();
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(imageViews.get(position));
return imageViews.get(position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(imageViews.get(position));
}
}
class MyOnPageChangeListener implements OnPageChangeListener {
@Override
public void onPageScrollStateChanged(int arg0) {
switch (arg0) {
case 1:
isAutoPlay = false;
break;
case 2:
isAutoPlay = true;
break;
case 0:
if (vp.getCurrentItem() == 0) {
vp.setCurrentItem(count, false);
} else if (vp.getCurrentItem() == count + 1) {
vp.setCurrentItem(1, false);
}
currentItem = vp.getCurrentItem();
isAutoPlay = true;
break;
}
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageSelected(int arg0) {
for (int i = 0; i < iv_dots.size(); i++) {
if (i == arg0 - 1) {
iv_dots.get(i).setImageResource(R.drawable.dot_focus);
} else {
iv_dots.get(i).setImageResource(R.drawable.dot_blur);
}
}
}
}
public void removeCallbacksAndMessages() {
handler.removeCallbacksAndMessages(null);
context = null;
}
}
luobo_layout:
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/ll_dot"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:gravity="right"
android:orientation="horizontal"
android:padding="8dp">
<View
android:id="@+id/v_dot1"
android:layout_width="8dp"
android:layout_height="8dp"
android:background="@drawable/dot_focus" />
<View
android:id="@+id/v_dot2"
android:layout_width="8dp"
android:layout_height="8dp"
android:layout_marginLeft="5dp"
android:background="@drawable/dot_blur" />
</LinearLayout>
<android.support.v4.view.ViewPager
android:id="@+id/vp"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</merge>
firstFragment调用:
<com.utils.LunBoUtils
android:id="@+id/lunbo"
android:layout_width="match_parent"
android:layout_height="220dp">
</com.utils.LunBoUtils>
------------
int[] imagesRes = {R.drawable.a1, R.drawable.a2, R.drawable.a3,
R.drawable.a4, R.drawable.a5};
lunbo.setImagesRes(imagesRes);
-----------------------------------------------
github地址:
https://github.com/whyareyousomw/Kanner;
android很有用轮播图实现,可下载
猜你喜欢
转载自blog.csdn.net/whyareusomw/article/details/63252850
今日推荐
周排行