您的位置:首页 > 移动开发 > Android开发

轮播banner,实现旋转木马效果,Galler 效果,可无限循环自动播放、拖拽

2016-10-26 21:43 791 查看

轮播banner,实现旋转木马效果,Galler 效果,可无限循环自动播放、拖拽

基于上次修改完善,以解决解决与SlidingMenu的冲突,并完善改写自动轮播方法,可实现轮播banner,旋转木马效果,可自定义是否无限循环自动播放,可拖拽滑动,可自定义轮播时间、滑动时间,高自定义,大家不要错过了。

源码在最下方

效果图







主要特点

1,适应横竖屏切换

2,解决轮播与scrollview嵌套冲突

3,高自定义

4,自动滑动

5,果冻拖拽弹回

6,自定义背景

7,解决解决与SlidingMenu的冲突

使用步骤

导入项目

main_activity.xml布局

说明

说明
设置android:orientation=”horizontal横向滑动
设置android:orientation=”vertical”纵向滑动
(注:CarouselViewPager的父布局必须是FrameLayout不然会抛UnsupportedOperationException异常: 父布局应该是 FrameLayout.)

<com.klxair.ui.view.viewpager.directionalcarousel.CarouselViewPager
android:id="@+id/carousel_pager"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="horizontal"
carousel:infinite="true"
carousel:scrollScalingMode="bigCurrent" />


MainActivity类

说明

说明
play播放的开关
sleepTime播放的间隔时间
playingDirection播放的方向
playType播放方向方式(1顺序播放和0来回播放)
i当前页数
package com.klxair.directionalcarouseldemo;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Toast;

import java.util.ArrayList;

import com.klxair.ui.view.viewpager.directionalcarousel.CarouselPagerAdapter;
import com.klxair.ui.view.viewpager.directionalcarousel.CarouselViewPager;
import com.klxair.ui.view.viewpager.directionalcarousel.page.OnPageClickListener;

public class MainActivity extends AppCompatActivity implements OnPageClickListener<MyPageItem> {
private CarouselViewPager<MyPageItem> mViewPager;
private CarouselPagerAdapter<MyPageItem> mPagerAdapter;
private ArrayList<MyPageItem> mItems;

/** 播放的间隔时间 */
private int sleepTime = 5000;
/** 播放的方向 */
private int playingDirection = 0;
/** 播放方向方式(1顺序播放和0来回播放) */
private int playType = 0;
/** 当前页数 */
int i = 0;
/** 播放动画 */
boolean anim = true;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

if (savedInstanceState == null) {
int size = 2;
mItems = new ArrayList<MyPageItem>(size);
for (int i = 0; i < size; i++) {
mItems.add(new MyPageItem(
"https://ss0.bdstatic.com/94oJfD_bAAcT8t7mm9GUKT-xh_/timg?image&quality=100&size=b4000_4000&sec=1477474555&di=a14f1611850494e3418030a7ca76f392&src=http://img3.duitang.com/uploads/item/201603/16/20160316211953_vk2An.jpeg"));
mItems.add(new MyPageItem(
"https://ss0.bdstatic.com/94oJfD_bAAcT8t7mm9GUKT-xh_/timg?image&quality=100&size=b4000_4000&sec=1477476394&di=b5314882fbffbd3159b02b31ae9f4c14&src=http://pic.58pic.com/58pic/13/41/01/49e58PIC9iu_1024.jpg"));
}
} else {
mItems = savedInstanceState.getParcelableArrayList("items");
}

mViewPager = (CarouselViewPager) findViewById(R.id.carousel_pager);
mPagerAdapter = new CarouselPagerAdapter<MyPageItem>(getSupportFragmentManager(), MyPageFragment.class,
R.layout.page_layout, mItems);
mPagerAdapter.setOnPageClickListener(this);

mViewPager.setAdapter(mPagerAdapter);
initView();
}

@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelableArrayList("items", mItems);
}

@Override
public void onSingleTap(View view, MyPageItem item) {
Toast.makeText(getApplicationContext(), "单击: " + item.getTitle(), Toast.LENGTH_SHORT).show();
}

@Override
public void onDoubleTap(View view, MyPageItem item) {
Toast.makeText(getApplicationContext(), "双击: " + item.getTitle(), Toast.LENGTH_SHORT).show();
}

private void initView() {
}

@Override
public void onStart() {
// 设置是否轮播
mViewPager.initPlayConfigure(mViewPager, mItems, sleepTime, playingDirection, playType, anim);
super.onStart();
}

@Override
public void onStop() {
mViewPager.stopPlay();
super.onStop();
}

}


page_con
b1aa
tent.xml布局

说明

(com.klxair.ui.view.imageview.RoundImageView该控件为自己写的圆角图片类,如果你们自己用的话替换成ImageView就可以了。如果有朋友想要这个工具类的话,也可以联系我)

说明
android:foreground点击后显示的背景色
<?xml version="1.0" encoding="utf-8"?>
<com.klxair.ui.view.viewpager.directionalcarousel.page.PageLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res/com.klxair.directionalcarouseldemo"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical" >

<com.klxair.ui.view.viewpager.directionalcarousel.fglayout.ForegroundLinearLayout
android:id="@+id/page_content"
android:layout_width="@dimen/page_content_width"
android:layout_height="@dimen/page_content_height"
android:clickable="true"
android:foreground="@drawable/item_selector"
android:gravity="center" >

<com.klxair.ui.view.imageview.RoundImageView
android:id="@+id/iv_pho"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="centerCrop"
android:src="@drawable/ic_launcher"
app:type="round" >
</com.klxair.ui.view.imageview.RoundImageView>
</com.klxair.ui.view.viewpager.directionalcarousel.fglayout.ForegroundLinearLayout>

</com.klxair.ui.view.viewpager.directionalcarousel.page.PageLayout>


MyPageFragment类

说明

(ImageUtils.setImagePic(iv_pho, pageItem.getTitle(), null);网络加载图片工具,项目里也没有的,如果你们自己用的话替换成自己长用的网络加载图片类就可以了,我这个是基于Picasa写的。如果有朋友想要这个工具类的话,也可以联系我)

public class MyPageFragment extends PageFragment<MyPageItem> {
@Override
public View setupPage(PageLayout pageLayout, MyPageItem pageItem) {
View pageContent = pageLayout.findViewById(R.id.page_content);
RoundImageView iv_pho = (RoundImageView) pageContent.findViewById(R.id.iv_pho);
ImageUtils.setImagePic(iv_pho, pageItem.getTitle(), null);
return pageContent;
}
}


MyPageItem类

大家都看的懂,这就不多说明了

public class MyPageItem implements Parcelable {
private String mTitle;

public MyPageItem(String title) {
mTitle = title;
}

private MyPageItem(Parcel in) {
mTitle = in.readString();
}

public String getTitle() {
return mTitle;
}

public static final Parcelable.Creator<MyPageItem> CREATOR =
new Parcelable.Creator<MyPageItem>() {
@Override
public MyPageItem createFromParcel(Parcel in) {
return new MyPageItem(in);
}

@Override
public MyPageItem[] newArray(int size) {
return new MyPageItem[size];
}
};

@Override
public int describeContents() {
return 0;
}

@Override
public void writeToParcel(Parcel out, int flags) {
out.writeString(mTitle);
}
}


有问题什么欢迎大家提出来。后期还会对其进行优化。

感谢大家支持!

项目下载地址:http://download.csdn.net/detail/ls498297458/9676673

GitHub下载地址:https://github.com/KLXair/CarouselViewPager
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息