实现本地图片和网络加载图片的多种轮播效果图的任意切换(3D效果,翻转效果,淡入淡出效果,等等效果)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@android:color/holo_orange_light"
tools:context="com.example.ytf.lunboapplication.MainActivity">
<com.bigkoo.convenientbanner.ConvenientBanner
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/convenientBanner"
android:layout_width="match_parent"
android:layout_height="200dp"
app:canLoop="true"/><!--控制循环与否-->
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
轮播本地图片的封装类
package com.example.ytf.lunboapplication;
import android.content.Context;
import android.view.View;
import android.widget.ImageView;
import com.bigkoo.convenientbanner.holder.Holder;
import com.squareup.picasso.Picasso;
/**
* Created by YTF on 2017/7/24.
*/
public class LocalImageHolderView implements Holder<Integer> {
private ImageView imageView;
@Override
public View createView(Context context) {
imageView = new ImageView(context);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
return imageView;
}
@Override
public void UpdateUI(Context context, int position, Integer data) {
imageView.setImageResource(R.drawable.ic_default_adimage);
Picasso.with(context)
.load(data)
.error(R.drawable.ic_default_adimage)
.placeholder(R.drawable.ic_default_adimage)
.fit()
.into(imageView);
}
}
轮播网络加载图片的封装类
package com.example.ytf.lunboapplication;
import android.content.Context;
import android.view.View;
import android.widget.ImageView;
import com.bigkoo.convenientbanner.holder.Holder;
import com.squareup.picasso.Picasso;
/**
* Created by YTF on 2017/7/24.
*/
public class NetworkImageHolderView implements Holder<String> {
private ImageView imageView;
@Override
public View createView(Context context) {
//你可以通过layout文件来创建,也可以像我一样用代码创建,不一定是Image,任何控件都可以进行翻页
imageView = new ImageView(context);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
return imageView;
}
@Override
public void UpdateUI(Context context, int position, String data) {
imageView.setImageResource(R.drawable.ic_default_adimage);//默认图片
// ImageLoader.getInstance().displayImage(data,imageView);
Picasso.with(context)
.load(data)
.fit()
.placeholder(R.drawable.ic_default_adimage)
.into(imageView);
}
}
listview选择不同轮播风格的item布局
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:textSize="20sp"
android:padding="20dp"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
集成多种轮播风格效果的实现,随意点击item进行切换风格
package com.example.ytf.lunboapplication;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import com.ToxicBakery.viewpager.transforms.ABaseTransformer;
import com.ToxicBakery.viewpager.transforms.AccordionTransformer;
import com.ToxicBakery.viewpager.transforms.BackgroundToForegroundTransformer;
import com.ToxicBakery.viewpager.transforms.CubeInTransformer;
import com.ToxicBakery.viewpager.transforms.CubeOutTransformer;
import com.ToxicBakery.viewpager.transforms.DefaultTransformer;
import com.ToxicBakery.viewpager.transforms.DepthPageTransformer;
import com.ToxicBakery.viewpager.transforms.FlipHorizontalTransformer;
import com.ToxicBakery.viewpager.transforms.FlipVerticalTransformer;
import com.ToxicBakery.viewpager.transforms.ForegroundToBackgroundTransformer;
import com.ToxicBakery.viewpager.transforms.RotateDownTransformer;
import com.ToxicBakery.viewpager.transforms.RotateUpTransformer;
import com.ToxicBakery.viewpager.transforms.StackTransformer;
import com.ToxicBakery.viewpager.transforms.ZoomInTransformer;
import com.ToxicBakery.viewpager.transforms.ZoomOutTranformer;
import com.bigkoo.convenientbanner.ConvenientBanner;
import com.bigkoo.convenientbanner.holder.CBViewHolderCreator;
import com.bigkoo.convenientbanner.listener.OnItemClickListener;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener, ViewPager.OnPageChangeListener, OnItemClickListener {
private ConvenientBanner convenientBanner;//轮播图控件
private ArrayList<Integer> localImages = new ArrayList<Integer>();//本地轮播图片集合
private List<String> networkImages;
private String[] images = {//网络图片
"http://img2.3lian.com/2014/f2/37/d/40.jpg",
"http://img2.3lian.com/2014/f2/37/d/39.jpg",
"http://www.8kmm.com/UploadFiles/2012/8/201208140920132659.jpg",
"http://f.hiphotos.baidu.com/image/h%3D200/sign=1478eb74d5a20cf45990f9df460b4b0c/d058ccbf6c81800a5422e5fdb43533fa838b4779.jpg",
"http://f.hiphotos.baidu.com/image/pic/item/09fa513d269759ee50f1971ab6fb43166c22dfba.jpg"
};
private ListView listView;//轮播效果类别名称
private ArrayAdapter transformerArrayAdapter;
private ArrayList<String> transformerList = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
convenientBanner = (ConvenientBanner) findViewById(R.id.convenientBanner);
listView = (ListView) findViewById(R.id.listView);
loadTestDatas();
// initNetCB();
initLocalCB();
transformerArrayAdapter = new ArrayAdapter(this, R.layout.adapter_transformer, transformerList);
transformerArrayAdapter.notifyDataSetChanged();
listView.setAdapter(transformerArrayAdapter);
listView.setOnItemClickListener(this);
}
private void initLocalCB() {
convenientBanner.setPages(
new CBViewHolderCreator<LocalImageHolderView>() {
@Override
public LocalImageHolderView createHolder() {
return new LocalImageHolderView();
}
}, localImages)
//设置两个点图片作为翻页指示器,不设置则没有指示器,可以根据自己需求自行配合自己的指示器,不需要圆点指示器可用不设
.setPageIndicator(new int[]{R.drawable.ic_page_indicator, R.drawable.ic_page_indicator_focusedblue})
//设置指示器的方向
.setPageIndicatorAlign(ConvenientBanner.PageIndicatorAlign.CENTER_HORIZONTAL)
.setOnPageChangeListener(this)//监听翻页事件
.setOnItemClickListener(this);
// convenientBanner.setManualPageable(false);//设置不能手动影响
}
/**
* 网络图片轮播
*/
private void initNetCB() {
networkImages = Arrays.asList(images);
convenientBanner.setPages(new CBViewHolderCreator<NetworkImageHolderView>() {
@Override
public NetworkImageHolderView createHolder() {
return new NetworkImageHolderView();
}
}, networkImages)
//设置两个点图片作为翻页指示器,不设置则没有指示器,可以根据自己需求自行配合自己的指示器,不需要圆点指示器可用不设
.setPageIndicator(new int[]{R.drawable.ic_page_indicator, R.drawable.ic_page_indicator_focusedblue})
//设置指示器的方向水平居中
.setPageIndicatorAlign(ConvenientBanner.PageIndicatorAlign.CENTER_HORIZONTAL)
.setOnPageChangeListener(this)//监听翻页事件
.setOnItemClickListener(this);
// .setPageTransformer();
// convenientBanner.setManualPageable(false);//设置不能手动影响
}
@Override
protected void onResume() {
super.onResume();
//开始自动翻页
convenientBanner.startTurning(2500);//轮播间隔
convenientBanner.setScrollDuration(2200);//设置滑动速度
convenientBanner.setPageTransformer(new CubeOutTransformer());//设置轮播方式,3D等
}
@Override
protected void onPause() {
super.onPause();
//停止翻页
convenientBanner.stopTurning();
}
/*
*加入测试Views
* */
private void loadTestDatas() {
//本地图片集合
for (int position = 0; position < 7; position++)
localImages.add(getResId("ic_test_" + position, R.drawable.class));
//实现Viewpager多种切换动画的开源库ViewPagerTransforms
//compile 'com.ToxicBakery.viewpager.transforms:view-pager-transforms:1.2.32@aar'
//各种翻页效果
transformerList.add(DefaultTransformer.class.getSimpleName());
transformerList.add(AccordionTransformer.class.getSimpleName());
transformerList.add(BackgroundToForegroundTransformer.class.getSimpleName());
transformerList.add(CubeInTransformer.class.getSimpleName());
transformerList.add(CubeOutTransformer.class.getSimpleName());
transformerList.add(DepthPageTransformer.class.getSimpleName());
transformerList.add(FlipHorizontalTransformer.class.getSimpleName());
transformerList.add(FlipVerticalTransformer.class.getSimpleName());
transformerList.add(ForegroundToBackgroundTransformer.class.getSimpleName());
transformerList.add(RotateDownTransformer.class.getSimpleName());
transformerList.add(RotateUpTransformer.class.getSimpleName());
transformerList.add(StackTransformer.class.getSimpleName());
transformerList.add(ZoomInTransformer.class.getSimpleName());
transformerList.add(ZoomOutTranformer.class.getSimpleName());
}
/**
* 通过文件名获取资源id 例子:getResId("icon", R.drawable.class);
*
* @param variableName
* @param c
* @return
*/
public static int getResId(String variableName, Class<?> c) {
try {
Field idField = c.getDeclaredField(variableName);
return idField.getInt(idField);
} catch (Exception e) {
e.printStackTrace();
return -1;
}
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
// Toast.makeText(this,"监听到翻到第"+position+"了",Toast.LENGTH_SHORT).show();
}
@Override
public void onPageScrollStateChanged(int state) {
}
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
// 点击后加入两个内容
// localImages.clear();
// localImages.add(R.drawable.ic_test_2);
// localImages.add(R.drawable.ic_test_4);
// convenientBanner.notifyDataSetChanged();
//控制是否循环
// convenientBanner.setCanLoop(!convenientBanner.isCanLoop());
String transforemerName = transformerList.get(position);
try {
Class cls = Class.forName("com.ToxicBakery.viewpager.transforms." + transforemerName);
ABaseTransformer transforemer = (ABaseTransformer) cls.newInstance();
convenientBanner.getViewPager().setPageTransformer(true, transforemer);
//部分3D特效需要调整滑动速度
if (transforemerName.equals("StackTransformer")) {
convenientBanner.setScrollDuration(1200);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
@Override
public void onItemClick(int position) {
Toast.makeText(this, "点击了第" + position + "个", Toast.LENGTH_SHORT).show();
}
}