Android实现BannerLayout图文轮播功能

本文实例为大家分享了Android实现BannerLayout图文轮播功能的具体代码,供大家参考,具体内容如下

实现效果图:

(1)在biuld.gradle文件加入

compile 'com.ydevelop:bannerlayout:1.0.4'

(2)创建BannerLayout文件

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Interpolator;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.GradientDrawable;
import android.graphics.drawable.LayerDrawable;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.NonNull;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Log;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.Scroller;
import android.widget.TextView;

import com.bumptech.glide.Glide;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

public class BannerLayout extends RelativeLayout {

 private ViewPager mViewPager; // 轮播容器

 // 指示器(圆点)容器
 private LinearLayout indicatorContainer;

 private Drawable unSelectedDrawable;
 private Drawable selectedDrawable;

 private int WHAT_AUTO_PLAY = 1000;

 private boolean isAutoPlay = true; // 自动轮播

 private int itemCount;

 private int selectedIndicatorColor = 0xffff0000;
 private int unSelectedIndicatorColor = 0x88888888;
 private int titleBGColor = 0X33000000;
 private int titleColor = 0Xffffffff;

 private Shape indicatorShape = Shape.oval;
 private int selectedIndicatorHeight = 20;
 private int selectedIndecatorWidth = 20;
 private int unSelectedIndicatorHeight = 20;
 private int unSelectedIndecatorWidth = 20;

 private int autoPlayDuration = 4000;
 private int scrollDuration = 900;
 // 指示器中点和点之间的距离
 private int indicatorSpace = 10;
 // 指示器整体的设置
 private int indicatorMargin = 20;

 private static final int titlePadding = 20;

 private int defaultImage;

 private enum Shape {
 // 矩形 或 圆形的指示器
 rect, oval
 }

 private OnBannerItemClickListener mOnBannerItemClickListener;

 private Handler mHandler = new Handler(new Handler.Callback() {
 @Override
 public boolean handleMessage(Message msg) {
  if (msg.what == WHAT_AUTO_PLAY) {
  if (mViewPager != null) {
   mViewPager.setCurrentItem(mViewPager.getCurrentItem() + 1, true);
   mHandler.sendEmptyMessageDelayed(WHAT_AUTO_PLAY, autoPlayDuration);
  }
  }
  return false;
 }
 });

 public BannerLayout(Context context) {
 super(context);
 init(null, 0);
 }

 public BannerLayout(Context context, AttributeSet attrs) {
 super(context, attrs);
 init(attrs, 0);
 }

 public BannerLayout(Context context, AttributeSet attrs, int defStyleAttr) {
 super(context, attrs, defStyleAttr);
 init(attrs, defStyleAttr);
 }

 private void init(AttributeSet attrs, int defStyleAttr) {

 TypedArray array = getContext().obtainStyledAttributes(attrs, R.styleable.BannerLayoutStyle, defStyleAttr, 0);
 selectedIndicatorColor = array.getColor(R.styleable.BannerLayoutStyle_selectedIndicatorColor, selectedIndicatorColor);
 unSelectedIndicatorColor = array.getColor(R.styleable.BannerLayoutStyle_unSelectedIndicatorColor, unSelectedIndicatorColor);

 titleBGColor = array.getColor(R.styleable.BannerLayoutStyle_titleBGColor, titleBGColor);
 titleColor = array.getColor(R.styleable.BannerLayoutStyle_titleColor, titleColor);

 int shape = array.getInt(R.styleable.BannerLayoutStyle_indicatorShape, Shape.oval.ordinal());

 for (Shape shape1 : Shape.values()) {
  if (shape1.ordinal() == shape) {
  indicatorShape = shape1;
  break;
  }
 }

 selectedIndecatorWidth = (int) array.getDimension(R.styleable.BannerLayoutStyle_selectedIndicatorWidth, selectedIndecatorWidth);
 selectedIndicatorHeight = (int) array.getDimension(R.styleable.BannerLayoutStyle_selectedIndicatorHeight, selectedIndicatorHeight);

 unSelectedIndecatorWidth = (int) array.getDimension(R.styleable.BannerLayoutStyle_unSelectedIndicatorWidth, unSelectedIndecatorWidth);
 unSelectedIndicatorHeight = (int) array.getDimension(R.styleable.BannerLayoutStyle_unSelectedIndicatorHeight, unSelectedIndicatorHeight);

 indicatorSpace = (int) array.getDimension(R.styleable.BannerLayoutStyle_indicatorSpace, indicatorSpace);
 indicatorMargin = (int) array.getDimension(R.styleable.BannerLayoutStyle_indicatorMargin, indicatorMargin);

 autoPlayDuration = array.getInt(R.styleable.BannerLayoutStyle_autoPlayDuration, autoPlayDuration);
 scrollDuration = array.getInt(R.styleable.BannerLayoutStyle_scrollDuration, scrollDuration);

 isAutoPlay = array.getBoolean(R.styleable.BannerLayoutStyle_isAutoPlay, isAutoPlay);

 defaultImage = array.getResourceId(R.styleable.BannerLayoutStyle_defaultImage, defaultImage);

 array.recycle();

 LayerDrawable unSelectedLayerDrawable;
 LayerDrawable selectedLayerDrawable;

 GradientDrawable unSelectedGradientDrawable = new GradientDrawable();
 GradientDrawable selectedGradientDtawbale = new GradientDrawable();

 switch (indicatorShape) {
  case rect:
  unSelectedGradientDrawable.setShape(GradientDrawable.RECTANGLE);
  selectedGradientDtawbale.setShape(GradientDrawable.RECTANGLE);
  break;
  case oval:
  unSelectedGradientDrawable.setShape(GradientDrawable.OVAL);
  selectedGradientDtawbale.setShape(GradientDrawable.OVAL);
  break;
 }

 unSelectedGradientDrawable.setColor(unSelectedIndicatorColor);
 unSelectedGradientDrawable.setSize(unSelectedIndecatorWidth, unSelectedIndicatorHeight);
 unSelectedLayerDrawable = new LayerDrawable(new Drawable[]{unSelectedGradientDrawable});
 unSelectedDrawable = unSelectedLayerDrawable;

 selectedGradientDtawbale.setColor(selectedIndicatorColor);
 selectedGradientDtawbale.setSize(selectedIndecatorWidth, selectedIndicatorHeight);
 selectedLayerDrawable = new LayerDrawable(new Drawable[]{selectedGradientDtawbale});

 selectedDrawable = selectedLayerDrawable;

 }

 /**
 * 添加本地图片
 *
 * @param viewRes 图片id集合
 * @param titles 标题集合,可空
 */
 public void setViewRes(List<Integer> viewRes, List<String> titles) {
 List<View> views = new ArrayList<>();
 itemCount = viewRes.size();
 if (titles != null && titles.size() != viewRes.size()) {
  throw new IllegalStateException("views.size() != titles.size()");
 }
 // 把数量拼凑到三个以上
 if (itemCount < 1) {
  throw new IllegalStateException("item count not equal zero");
 } else if (itemCount < 2) {
  views.add(getFrameLayoutView(viewRes.get(0), titles != null ? titles.get(0) : null, 0));
  views.add(getFrameLayoutView(viewRes.get(0), titles != null ? titles.get(0) : null, 0));
  views.add(getFrameLayoutView(viewRes.get(0), titles != null ? titles.get(0) : null, 0));

 } else if (itemCount < 3) {
  views.add(getFrameLayoutView(viewRes.get(0), titles != null ? titles.get(0) : null, 0));
  views.add(getFrameLayoutView(viewRes.get(1), titles != null ? titles.get(1) : null, 1));
  views.add(getFrameLayoutView(viewRes.get(0), titles != null ? titles.get(0) : null, 0));
  views.add(getFrameLayoutView(viewRes.get(1), titles != null ? titles.get(1) : null, 1));
 } else {
  for (int i = 0; i < viewRes.size(); i++) {
  views.add(getFrameLayoutView(viewRes.get(i), titles != null ? titles.get(i) : null, i));
  }
 }
 setViews(views);
 }
 //添加网络图片路径
 public void setViewUrls(Context context,List<String> urls, List<String> titles) {
 List<View> views = new ArrayList<>();
 itemCount = urls.size();
 Log.e("TAG",titles.size()+"---90---"+urls.size());

 if (titles != null && titles.size() != itemCount) {
  throw new IllegalStateException("views.size() != titles.size()");
 }
 //主要是解决当item为小于3个的时候滑动有问题,这里将其拼凑成3个以上
 if (itemCount < 1) {//当item个数0
  throw new IllegalStateException("item count not equal zero");
 } else if (itemCount < 2) { //当item个数为1
  views.add(getFrameLayoutView(context,urls.get(0), titles != null ? titles.get(0) : null, 0));
  views.add(getFrameLayoutView(context,urls.get(0), titles != null ? titles.get(0) : null, 0));
  views.add(getFrameLayoutView(context,urls.get(0), titles != null ? titles.get(0) : null, 0));
 } else if (itemCount < 3) {//当item个数为2
  views.add(getFrameLayoutView(context,urls.get(0), titles != null ? titles.get(0) : null, 0));
  views.add(getFrameLayoutView(context,urls.get(1), titles != null ? titles.get(1) : null, 1));
  views.add(getFrameLayoutView(context,urls.get(0), titles != null ? titles.get(0) : null, 0));
  views.add(getFrameLayoutView(context,urls.get(1), titles != null ? titles.get(1) : null, 1));
 } else {
  for (int i = 0; i < urls.size(); i++) {
  views.add(getFrameLayoutView(context,urls.get(i), titles != null ? titles.get(i) : null, i));
  }
 }
 setViews(views);
 }
 private void setViews(final List<View> views) {
 mViewPager = new ViewPager(getContext());
 addView(mViewPager);
 setSliderTransformDuration(scrollDuration);
 //初始化indicatorContainer
 indicatorContainer = new LinearLayout(getContext());
 indicatorContainer.setGravity(Gravity.CENTER_VERTICAL);
 LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
 // 设置 指示点的位置 ALIGN_PARENT_RIGHT表示居右 CENTER_HORIZONTAL表示居中
 params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
 params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);

 //设置margin
 params.setMargins(indicatorMargin, indicatorMargin, indicatorMargin, indicatorMargin);
 //添加指示器容器布局到SliderLayout
 addView(indicatorContainer, params);

 //初始化指示器,并添加到指示器容器布局
 for (int i = 0; i < itemCount; i++) {
  ImageView indicator = new ImageView(getContext());
  indicator.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
  indicator.setPadding(indicatorSpace, indicatorSpace, indicatorSpace, indicatorSpace);
  indicator.setImageDrawable(unSelectedDrawable);
  indicatorContainer.addView(indicator);
 }
 LoopPagerAdapter pagerAdapter = new LoopPagerAdapter(views);
 mViewPager.setAdapter(pagerAdapter);
 //设置当前item到Integer.MAX_VALUE中间的一个值,看起来像无论是往前滑还是往后滑都是ok的
 //如果不设置,用户往左边滑动的时候已经划不动了
 int targetItemPosition = Integer.MAX_VALUE / 2 - Integer.MAX_VALUE / 2 % itemCount;
 mViewPager.setCurrentItem(targetItemPosition);
 switchIndicator(targetItemPosition % itemCount);
 mViewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
  @Override
  public void onPageSelected(int position) {
  switchIndicator(position % itemCount);
  }
 });
 startAutoPlay();

 }
 /**
 * 开始自动轮播
 */
 public void startAutoPlay() {
 stopAutoPlay(); // 避免重复消息
 if (isAutoPlay) {
  mHandler.sendEmptyMessageDelayed(WHAT_AUTO_PLAY, autoPlayDuration);
 }

 @Override
 protected void onWindowVisibilityChanged(int visibility) {
 super.onWindowVisibilityChanged(visibility);
 if (visibility == VISIBLE) {
  startAutoPlay();
 } else {
  stopAutoPlay();
 }
 }

 /**
 * 停止自动轮播
 */
 public void stopAutoPlay() {
 if (isAutoPlay) {
  mHandler.removeMessages(WHAT_AUTO_PLAY);
 }
 }
 private void setSliderTransformDuration(int scrollDuration) {
 try {
  Field mScroller = ViewPager.class.getDeclaredField("mScroller");
  mScroller.setAccessible(true);
  FixedSpeedScroller fixedSpeedScroller = new FixedSpeedScroller(mViewPager.getContext(), null, scrollDuration);
  mScroller.set(mViewPager, fixedSpeedScroller);
 } catch (Exception e) {
  e.printStackTrace();
 }
 }
 @Override
 public boolean dispatchTouchEvent(MotionEvent ev) {
 switch (ev.getAction()) {
  case MotionEvent.ACTION_DOWN:
  stopAutoPlay();
  break;
  case MotionEvent.ACTION_CANCEL:
  case MotionEvent.ACTION_UP:
  startAutoPlay();
  break;
 }
 return super.dispatchTouchEvent(ev);
 }
 /**
 * 切换指示器状态
 *
 * @param currentPosition 当前位置
 */
 private void switchIndicator(int currentPosition) {
 for (int i = 0; i < indicatorContainer.getChildCount(); i++) {
  ((ImageView) indicatorContainer.getChildAt(i)).setImageDrawable(i == currentPosition ? selectedDrawable : unSelectedDrawable);
 }
 }
 public void setOnBannerItemClickListener(OnBannerItemClickListener onBannerItemClickListener) {
 this.mOnBannerItemClickListener = onBannerItemClickListener;
 }
 @NonNull
 private FrameLayout getFrameLayoutView(Context context, String url, String title, final int position) {
 FrameLayout frameLayout = new FrameLayout(getContext());
 FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
 layoutParams.gravity = Gravity.CENTER;
 ImageView imageView = new ImageView(getContext());
 frameLayout.addView(imageView);
 frameLayout.setOnClickListener(new OnClickListener() {
  @Override
  public void onClick(View v) {
  if (mOnBannerItemClickListener != null) {
   mOnBannerItemClickListener.onItemClick(position);
  }
  }
 });
 imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
 if (defaultImage != 0){
  Glide.with(getContext()).load(url).placeholder(defaultImage).centerCrop().into(imageView);
 }else {
  Glide.with(getContext()).load(url).centerCrop().into(imageView);
 }
 if (!TextUtils.isEmpty(title)) {
  TextView textView = new TextView(getContext());
  textView.setText(title);
  textView.setTextColor(titleColor);
  textView.setPadding(titlePadding, titlePadding, titlePadding, titlePadding);
  textView.setBackgroundColor(titleBGColor);
  textView.getPaint().setFakeBoldText(true);
  layoutParams.gravity = Gravity.BOTTOM;
  frameLayout.addView(textView, layoutParams);
 }
 return frameLayout;
 }
 @NonNull
 private FrameLayout getFrameLayoutView(Integer res, String title, final int position) {
 FrameLayout frameLayout = new FrameLayout(getContext());
 FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
 layoutParams.gravity = Gravity.CENTER;
 ImageView imageView = new ImageView(getContext());
 frameLayout.addView(imageView);
 frameLayout.setOnClickListener(new OnClickListener() {
  @Override
  public void onClick(View v) {
  if (mOnBannerItemClickListener != null) {
   mOnBannerItemClickListener.onItemClick(position);
  }
  }
 });
 imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
 Glide.with(getContext()).load(res).centerCrop().into(imageView);
 if (!TextUtils.isEmpty(title)) {
  TextView textView = new TextView(getContext());
  textView.setText(title);
  textView.setTextColor(titleColor);
  textView.setPadding(titlePadding, titlePadding, titlePadding, titlePadding);
  textView.setBackgroundColor(titleBGColor);
  textView.getPaint().setFakeBoldText(true);
  layoutParams.gravity = Gravity.BOTTOM;
  frameLayout.addView(textView, layoutParams);
 }
 return frameLayout;
 }
 public interface OnBannerItemClickListener {
 void onItemClick(int position);
 }
 public class LoopPagerAdapter extends PagerAdapter {
 private List<View> views;

 public LoopPagerAdapter(List<View> views) {
  this.views = views;
 }
 @Override
 public int getCount() {
  //Integer.MAX_VALUE = 2147483647
  return Integer.MAX_VALUE;
 }
 @Override
 public boolean isViewFromObject(View view, Object object) {
  return view == object;
 }
 @Override
 public Object instantiateItem(ViewGroup container, int position) {
  if (views.size() > 0) {
  //position % view.size()是指虚拟的position会在[0,view.size())之间循环
  View view = views.get(position % views.size());
  if (container.equals(view.getParent())) {
   container.removeView(view);
  }
  container.addView(view);
  return view;
  }
  return null;
 }
 @Override
 public void destroyItem(ViewGroup container, int position, Object object) {
 }
 }
 public class FixedSpeedScroller extends Scroller {
 private int mDuration = 1000;
 public FixedSpeedScroller(Context context) {
  super(context);
 }
 public FixedSpeedScroller(Context context, Interpolator interpolator) {
  super(context, (android.view.animation.Interpolator) interpolator);
 }
 public FixedSpeedScroller(Context context, Interpolator interpolator, int duration) {
  this(context, interpolator);
  mDuration = duration;
 @Override
 public void startScroll(int startX, int startY, int dx, int dy, int duration) {
  // Ignore received duration, use fixed one instead
  super.startScroll(startX, startY, dx, dy, mDuration);
 }
 @Override
 public void startScroll(int startX, int startY, int dx, int dy) {
  // Ignore received duration, use fixed one instead
  super.startScroll(startX, startY, dx, dy, mDuration);
 }
 }

}

(3)MainAvtivity.java文件

import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by lenovo on 2018/4/23.
 */

public class MainActivity extends Activity {
 private MyListView lv_zyb;
 private ImageView iv_zybfh;
 @Override
 protected void onCreate(@Nullable Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);

 iv_zybfh=(ImageView) findViewById(R.id.iv_zybfh);
 BannerLayout bannerLayout = (BannerLayout) findViewById(R.id.bannerzhuangyuanbang);
 List<String> urls = new ArrayList<>();
 urls.add("http://img.pconline.com.cn/images/upload/upc/tx/photoblog/1404/02/c5/32731218_32731218_1396429876186.jpg");
 urls.add("http://pic2.16pic.com/00/11/65/16pic_1165030_b.jpg");
 urls.add("http://upload.17u.net/uploadpicbase/image/201708201147537103.jpg");
 urls.add("http://img2.gzgov.gov.cn/gzsrmzf/dcgz/lyzx/rmjd/201709/W020170926622407643781.jpg");
 urls.add("http://photocdn.sohu.com/20150324/Img410244363.jpg");
 urls.add("http://pic4.40017.cn/scenery/destination/2017/01/10/11/SiTllI.jpg");
 List<String> titleas = new ArrayList<>();
 titleas.add("标题一");
 titleas.add("标题二");
 titleas.add("标题三");
 titleas.add("标题四");
 titleas.add("标题五");
 titleas.add("标题六");
 if (bannerLayout != null) {
  bannerLayout.setViewUrls(this ,urls, titleas);
  bannerLayout.setOnBannerItemClickListener(new BannerLayout.OnBannerItemClickListener() {
  @Override
  public void onItemClick(int position) {
   Toast.makeText(ZhuangyuanbangActivity.this, "position:" + position, Toast.LENGTH_SHORT).show();
  }
  });
 }
 }
 }

(4)activity_main.xml文件,必须加红色这一句,否则app开头的会报错。还有红色的是包名,记得修改为自己项目的包名。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 android:orientation="vertical"
 android:layout_width="match_parent"
 android:layout_height="match_parent">
 <applwj.eduation.com.topeduation.BannerLayout
 android:id="@+id/bannerzhuangyuanbang"
 android:layout_width="match_parent"
 android:layout_height="210dp"
 app:scrollDuration="1000"
 app:autoPlayDuration="3000"
 app:unSelectedIndicatorHeight="10dp"
 app:unSelectedIndicatorWidth="10dp"
 app:selectedIndicatorHeight="10dp"
 app:selectedIndicatorWidth="10dp"
 app:unSelectedIndicatorColor="#99ffffff"
 app:selectedIndicatorColor="#000000"
 app:isAutoPlay="true"
 />
</LinearLayout>

demo下载:Android实现图文轮播功能

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android实现图片轮播效果

    本文实例讲述了JaAndroid实现图片轮播效果代码,分享给大家供大家参考.具体如下: 运行效果截图如下: 具体代码如下: 首先看下一下布局文件: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_par

  • Android实现图片文字轮播特效

    本文实例讲解了Android实现图片文字轮播特效的详细代码,分享给大家供大家参考,具体内容如下 图片轮播是类似知乎日报上的一个轮播效果,如下图. 好了直接进入正题,首先是出示一下效果: MainActivity: import java.util.ArrayList; import java.util.List; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService;

  • Android ViewPager实现图片轮播效果

    在app中图片的轮播显示可以说是非常常见的实现效果了,其实现原理不过是利用ViewPager,然后利用handler每隔一定的时间将ViewPager的currentItem设置为当前item的position+1即可.先来看看效果图吧: 就是实现这样的一个轮播广告的效果. 因为这个是自己为了练习仿照某旅游类App做的,所以这里的数据是使用抓包工具抓取的,准备数据等工作就不在这里赘述了,反正数据的添加大体都是相同的.我的思路是这样的,从网络上实时的获取数据(当然你也可以将数据写死),然后通过网络

  • Android使用ViewPager加载图片和轮播视频

    作为Android基础组件之一,大家对viewpager已经很熟悉了,网上也有很多使用viewpager来加载图片的案例.但是像微信那样点击图片,可以轮播显示图片和视频的例子却没找到.正巧项目中有需求,可以就花时间写了下,现在给一下核心代码,希望对有此需求的同学们起一个抛砖引玉的作用.话不多说了,上代码: 以下是initData的代码 public void initData() { //把聊天界面的图片和视频找出来,并加到数组中,并在 //并根据传进来的position来找到视频或图片在数组中

  • Android实现图片轮播效果的两种方法

    大家在使用APP的过程中,经常会看到上部banner图片轮播的效果,那么今天我们就一起来学习一下,android中图片轮询的几种实现方法: 第一种:使用动画的方法实现:(代码繁琐) 这种发放需要:两个动画效果,一个布局,一个主类来实现,不多说了,来看代码吧: public class IamgeTrActivity extends Activity { /** Called when the activity is first created. */ public ImageView image

  • Android实现广告图片轮播效果

    本文实例介绍了Android广告轮播图效果实现方法,分享给大家供大家参考,具体内容如下 首先看下一下布局文件: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:

  • Android 使用ViewPager自动滚动循环轮播效果

    对Android 利用ViewPager实现图片可以左右循环滑动效果,感兴趣的朋友可以直接点击查看内容详情. 主要介绍如何实现ViewPager自动播放,循环滚动的效果及使用.顺便解决ViewPager嵌套(ViewPager inside ViewPager)影响触摸滑动及ViewPager滑动速度设置问题. 先给大家展示下效果图,喜欢的朋友可以下载源码: 1.实现 没有通过ScheduledExecutorService或Timer定期执行某个任务实现,而是简单的通过handler发送消息去

  • Android自动播放Banner图片轮播效果

    先看一下效果图 支持本地图片以及网络图片or本地网络混合. 使用方式: <com.jalen.autobanner.BannerView android:id="@+id/banner" android:layout_width="match_parent" android:layout_height="230dip"> </com.jalen.autobanner.BannerView> 核心代码: int length

  • Android实现Banner界面广告图片循环轮播(包括实现手动滑动循环)

    前言:经常会看到有一些app的banner界面可以实现循环播放多个广告图片和手动滑动循环.本以为单纯的ViewPager就可以实现这些功能.但是蛋疼的事情来了,ViewPager并不支持循环翻页.所以要实现循环还得需要自己去动手.自己在网上也找了些例子,本博文的Demo是结合自己找到的一些相关例子的基础上去改造,也希望对读者有用. Demo实现的效果图如下: Demo代码: 工程目录如下图: 废话不多说,上代码. 1.主Activity代码如下: package com.stevenhu.and

  • Android实现图片自动轮播并且支持手势左右无限滑动

    废话不多说了,先给大家上左右无限滑动的代码了. 1.左右无限滑动 public class MainActivity extends AppCompatActivity { private static ViewPager viewPager; private RadioGroup group; //图片资源,实际项目需要从网络获取 private int[] imageIds = {R.drawable.ym1, R.drawable.ym2, R.drawable.ym3, R.drawab

随机推荐