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

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

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

源码在最下方

  • 效果图

效果图横向 效果图纵向

效果图GIF

  • 主要特点

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_content.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

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
旋转木马布局效果     gradle    compile 'com.dalong:carrousellayout:1.0.0'or Maven    <dependency>       <groupId>com.dalong</groupId>       <artifactId>carrousellayout</artifactId>       <version>1.0.0</version>       <type>pom</type>     </dependency>xml:     <com.dalong.carrousellayout.CarrouselLayout            android:id="@ id/carrousel"            app:rotateDirection="anticlockwise"            app:r="200dp"            app:rotationTime="3000"            android:gravity="center"            android:layout_marginBottom="180dp"            android:layout_width="match_parent"            android:layout_height="match_parent">           <ImageView               android:src="@mipmap/image1"               android:layout_width="wrap_content"               android:layout_height="wrap_content" />           <ImageView               android:src="@mipmap/image2"               android:layout_width="wrap_content"               android:layout_height="wrap_content" />               ...        </com.dalong.carrousellayout.CarrouselLayout>java:    CarrouselLayout carrousel= (CarrouselLayout) findViewById(R.id.carrousel);     carrousel.setR(width/3)//设置R的大小              .setAutoRotation(false)//是否自动切换              .setAutoRotationTime(1500);//自动切换的时间  单位毫秒
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值