码迷,mamicode.com
首页 > 其他好文 > 详细

ViewPager手势切换页面+图片左右轮播效果(精简版本)

时间:2015-06-17 20:05:34      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:viewpager 轮播

效果图是:手势可以左右滑动界面,并且自动从第一张开始轮播到最后一张图片,紧接着开始从最后一张图片开始向反方向第一张轮播

如果你需要轮播效果,(我这个是精简版本的)  如果你需要手势来回切换图片  如果你不需要ui提供定位圆点 那么这篇博客  值得你看看

源码地址就不传了,代码已经贴出,你可以随便放5张图片即可

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.welcomeactivity.MainActivity" >

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
    </android.support.v4.view.ViewPager>

    <LinearLayout
        android:id="@+id/ll_points"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:orientation="horizontal" >
    </LinearLayout>

</RelativeLayout>

MainActivity

package com.example.welcomeactivity;

import java.util.ArrayList;

import android.R.integer;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;

public class MainActivity extends Activity implements OnPageChangeListener {

	private ViewPager viewpager;
	private LinearLayout ll_points;
	private ArrayList<ImageView> imageViews;
	private int[] imageViewIDS;
	private int previousSelectPosition = 0;
	private int lunbopos = 0;
	//是否向右开始自动播放
	private boolean toRight = true;
	//是否向左开始自动播放
	private boolean toLeft = false;
	private Handler handler = new Handler() {

		@Override
		public void handleMessage(Message msg) {
			super.handleMessage(msg);
			if (lunbopos <= 4) {
				viewpager.setCurrentItem(lunbopos);
				if (lunbopos == 4) {
					toRight = false;
					toLeft = true;
				}
				if (lunbopos == 0) {
					toRight = true;
					toLeft = false;

				}
			}
		}
	};

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initView();
		initPics();
		ll_points.getChildAt(previousSelectPosition).setEnabled(true);
		viewpager.setAdapter(new ViewPagerAdapter());
		viewpager.setOnPageChangeListener(this);
		// 自动切换页面功能
		new Thread(new Runnable() {

			@Override
			public void run() {
				while (true) {
					if (toRight) {
						SystemClock.sleep(2000);
						handler.sendEmptyMessage(0);
						lunbopos++;
					}
					if (toLeft) {

						SystemClock.sleep(2000);
						handler.sendEmptyMessage(0);
						lunbopos--;

					}

				}
			}
		}).start();
	}

	private void initPics() {
		for (int i = 0; i < imageViewIDS.length; i++) {
			ImageView imageView = new ImageView(this);
			imageView.setBackgroundResource(imageViewIDS[i]);
			imageViews.add(imageView);

			View view = new View(this);
			view.setBackgroundDrawable(getResources().getDrawable(
					R.drawable.point_background));
			LayoutParams lp = new LayoutParams(25, 25);
			lp.leftMargin = 10;
			view.setLayoutParams(lp);
			view.setEnabled(false);
			ll_points.addView(view);
		}
	}

	private void initView() {
		viewpager = (ViewPager) findViewById(R.id.viewpager);
		ll_points = (LinearLayout) findViewById(R.id.ll_points);
		imageViews = new ArrayList<ImageView>();
		imageViewIDS = new int[] { R.drawable.bg1, R.drawable.bg2,
				R.drawable.bg3, R.drawable.pic_01, R.drawable.pic_02 };
	}

	class ViewPagerAdapter extends PagerAdapter {

		@Override
		public int getCount() {
			return imageViews.size();
		}

		/**
		 * 判断出去的view是否等于进来的view 如果为true直接复用
		 */
		@Override
		public boolean isViewFromObject(View arg0, Object arg1) {
			return arg0 == arg1;
		}

		/**
		 * 销毁预加载以外的view对象, 会把需要销毁的对象的索引位置传进来就是position
		 */
		@Override
		public void destroyItem(ViewGroup container, int position, Object object) {
			container.removeView(imageViews.get(position));
		}

		/**
		 * 创建一个view
		 */
		@Override
		public Object instantiateItem(ViewGroup container, int position) {
			container.addView(imageViews.get(position));
			return imageViews.get(position);
		}
	}

	@Override
	public void onPageScrollStateChanged(int position) {
	}

	@Override
	public void onPageScrolled(int arg0, float arg1, int arg2) {

	}

	@Override
	public void onPageSelected(int position) {
		ll_points.getChildAt(previousSelectPosition).setEnabled(false); // 把前一个点置为normal状态
		ll_points.getChildAt(position).setEnabled(true); // 把当前选中的position对应的点置为enabled状态
		previousSelectPosition = position;

	}
}

另外圆点是xml实现,不是图片形式

point_background.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/point_enable" android:state_enabled="true"></item>
    <item android:drawable="@drawable/point_normal" android:state_enabled="false"></item>

</selector>

point_enable.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval" >
    
    <corners android:radius="5dip" />

    <solid android:color="#aaFFFFFF"/>
</shape>
point_normal.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval" >
    
    <corners android:radius="5dip" />

    <solid android:color="#55000000" />
</shape>


ViewPager手势切换页面+图片左右轮播效果(精简版本)

标签:viewpager 轮播

原文地址:http://blog.csdn.net/u013210620/article/details/46537283

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!