ViewPager手势切换页面+图片左右轮播效果(精简版本)
来源:互联网 发布:linux 不同网段转发 编辑:程序博客网 时间:2024/05/17 08:28
效果图是:手势可以左右滑动界面,并且自动从第一张开始轮播到最后一张图片,紧接着开始从最后一张图片开始向反方向第一张轮播
如果你需要轮播效果,(我这个是精简版本的) 如果你需要手势来回切换图片 如果你不需要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() {@Overridepublic 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;}}}};@Overrideprotected 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() {@Overridepublic 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 {@Overridepublic int getCount() {return imageViews.size();}/** * 判断出去的view是否等于进来的view 如果为true直接复用 */@Overridepublic boolean isViewFromObject(View arg0, Object arg1) {return arg0 == arg1;}/** * 销毁预加载以外的view对象, 会把需要销毁的对象的索引位置传进来就是position */@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {container.removeView(imageViews.get(position));}/** * 创建一个view */@Overridepublic Object instantiateItem(ViewGroup container, int position) {container.addView(imageViews.get(position));return imageViews.get(position);}}@Overridepublic void onPageScrollStateChanged(int position) {}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {}@Overridepublic 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>
0 0
- ViewPager手势切换页面+图片左右轮播效果(精简版本)
- android ViewPager实现页面左右切换效果
- viewpager实现画廊(中间图片全部显示,左右显示一部分b布局)无限轮播效果
- viewpager实现画廊(中间图片全部显示,左右显示一部分b布局)无限轮播效果
- ViewPager轮播切换带动画效果
- 让 Bootstrap 轮播效果支持左右滑动手势
- 让 Bootstrap 轮播效果支持左右滑动手势
- ViewPager实现左右循环滑动及轮播效果(广告栏效果)
- 使用ViewPager实现左右循环滑动及轮播效果
- 点击轮播图片左右按钮,实现轮播效果
- Android Viewpager实现图片轮播(仿优酷效果)
- Android Viewpager实现图片轮播(仿优酷效果)
- 使用ViewPager实现图片轮播效果(绝对好使)
- android图片轮播效果viewPager
- ViewPager页面切换效果
- ViewPager图片自动+手动左右无限轮播
- Android使用ViewPager实现左右循环滑动及轮播效果(抛出IllegalStateException)
- 封装自定义ViewPager实现左右自动切换和手势滑动效果
- House Robber II
- 文件读写案例分析
- UITextField
- FFMPEG命令
- linux内核资料
- ViewPager手势切换页面+图片左右轮播效果(精简版本)
- 分治法的经典问题——大整数相乘
- C#关于手机和固定电话的简单判断
- putchar打印浮点数
- 创建一个MDK工程时常见的几个问题
- uiscrollView更新
- Django1.8+Python3.4+Mysql5.5
- cocos2d-x 体积优化
- hiho欧拉路·二 ----- Fleury算法求欧拉路径