效果图是:手势可以左右滑动界面,并且自动从第一张开始轮播到最后一张图片,紧接着开始从最后一张图片开始向反方向第一张轮播
如果你需要轮播效果,(我这个是精简版本的) 如果你需要手势来回切换图片 如果你不需要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>