轮播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” | 纵向滑动 |
<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
相关文章推荐
- android的自动播放和伪无限循环的广告轮播实现
- Android实现带指示点的自动轮播无限循环效果
- Android ViewPager实现无限循环轮播广告位Banner效果
- Android之ViewPager自动循环播放(轮播)效果实现(超简单)
- Android实现基于ViewPager的无限循环自动播放带指示器的轮播图CarouselFigureView控件
- 动态生成Gallery控件组合实现无限循环自动播放广告图片效果总结
- IOS实现图片轮播无限循环效果
- Android 3D画廊采用Gallery实现无限循环、自动轮播
- ConvenientBanner 实现广告轮播,自动播放。(进阶篇)
- 使用ViewPager实现自动无限循环的轮播
- android 自定义无限循环播放的viewPager。轮播ViewPager。实现循环播放 广告,主题内容,活动,新闻内容时。
- Android实现轮播图无限循环效果
- Android 实现通知消息水平播放、无限循环效果
- Android无限循环与自动播放ViewPager的简单实现(广告栏)
- viewflow实现类似淘宝,网易新闻的横幅banner,可循环自动播放
- viewflow实现类似淘宝,网易新闻的横幅banner,可循环自动播放
- Android中ConvenientBanner的使用--获取本地图片 --(实现效果是自动轮播图片)
- Android 中ViewPager 实现banner无限轮播效果
- Android自动播放Banner图片轮播效果
- Android高仿京东淘宝自动无限循环轮播控件的实现思路和过程