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
原创粉丝点击