使用ViewPager实现图片轮播

图片轮播功能是最常见不过了,在android中可以是ViewPager组件来实现该功能,效果如下:


具体的实现代码:

<LinearLayout 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"
    android:layout_margin="10dp"
    android:orientation="vertical"
    tools:context=".MainActivity" >
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="150dp" >
        <android.support.v4.view.ViewPager
            android:id="@+id/view_pager"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
        <LinearLayout
            android:id="@+id/view_group"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_marginBottom="15dp"
            android:gravity="center"
            android:orientation="horizontal" >
        </LinearLayout>
    </RelativeLayout>
</LinearLayout>

package com.tenghu.adapter;
import java.util.List;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.ViewGroup;
public class ViewPagerAdapter extends PagerAdapter{
	private List<View> views;
	public ViewPagerAdapter(List<View> views){
		this.views=views;
	}
	@Override
	public int getCount() {
		return views.size();
	}
	@Override
	public boolean isViewFromObject(View arg0, Object arg1) {
		return arg0==arg1;
	}
	/**
	 * 销毁ViewPager
	 */
	@Override
	public void destroyItem(ViewGroup container, int position, Object object) {
		((ViewPager)container).removeView(views.get(position));
	}
	/**
	 * 实例化ViewPager
	 */
	@Override
	public Object instantiateItem(ViewGroup container, int position) {
		((ViewPager)container).addView(views.get(position));
		return views.get(position);
	}
}

package com.example.viewpagertest;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import com.tenghu.adapter.ViewPagerAdapter;
import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.ImageView;
public class MainActivity extends Activity {
	private ViewPager viewPager;//声明ViewPager控件对象
	private ImageView[] images;//声明存放小图标数组
	private boolean isContinue=true;//是否自动滚动
	private AtomicInteger what=new AtomicInteger();
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.activity_main);
		initViewPager();
	}
	
	/**
	 * 初始化ViewPager
	 */
	private void initViewPager(){
		//获取ViewPager对象
		viewPager=(ViewPager) findViewById(R.id.view_pager);
		//获取滚动图片集合
		List<View> views=obtainListView();
		//设置ViewPager的Adapter属性
		viewPager.setAdapter(new ViewPagerAdapter(views));
		//设置页面变化事件
		viewPager.setOnPageChangeListener(pageChangeListener);
		//设置触摸事件
		viewPager.setOnTouchListener(touchListener);
		
		new Thread(){
			public void run() {
				while(true){
					if(isContinue){
						handler.sendEmptyMessage(what.get());
						controlViewPagerShow();
					}
				}
			};
		}.start();
	}
	
	
	/**
	 * 控制ViewPager显示
	 */
	private void controlViewPagerShow(){
		what.incrementAndGet();//获取当前值并自增
		if(what.get()>images.length-1)
			what.getAndAdd(-images.length);
		try {
			Thread.sleep(3000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 创建页面变化事件
	 */
	OnPageChangeListener pageChangeListener=new OnPageChangeListener() {
		@Override
		public void onPageSelected(int arg0) {
			for(int i=0;i<images.length;i++){
				images[i].setBackgroundResource(R.drawable.btn_radio_on_holo_dark);
				if(arg0!=i)
					images[i].setBackgroundResource(R.drawable.btn_radio_on_disabled_holo_dark);
			}
		}
		@Override
		public void onPageScrolled(int arg0, float arg1, int arg2) {
		}
		@Override
		public void onPageScrollStateChanged(int arg0) {
		}
	};
	
	/**
	 * 创建触摸事件
	 */
	OnTouchListener touchListener=new OnTouchListener() {
		@Override
		public boolean onTouch(View v, MotionEvent event) {
			switch (event.getAction()) {
			case MotionEvent.ACTION_MOVE:
			case MotionEvent.ACTION_DOWN:
				isContinue=false;
				break;
			case MotionEvent.ACTION_UP:
				isContinue=true;
				break;
			default:
				isContinue=true;
				break;
			}
			return false;
		}
	};
	
	/**
	 * 获取需要滚动图片的集合
	 * @return
	 */
	private List<View> obtainListView(){
		//获取ViewGroup
		ViewGroup viewGroup=(ViewGroup) findViewById(R.id.view_group);
		//创建存放View的集合
		List<View> views=new ArrayList<View>();
		//准备需要滚动的图片
		ImageView image1=new ImageView(this);
		image1.setBackgroundResource(R.drawable.back);
		views.add(image1);
		
		ImageView image2=new ImageView(this);
		image2.setBackgroundResource(R.drawable.back1);
		views.add(image2);
		
		ImageView image3=new ImageView(this);
		image3.setBackgroundResource(R.drawable.back2);
		views.add(image3);
		
		ImageView image4=new ImageView(this);
		image4.setBackgroundResource(R.drawable.zyc);
		views.add(image4);
		
		//创建小图标数组
		images=new ImageView[views.size()];
		//循环添加小图标
		for(int i=0;i<images.length;i++){
			images[i]=new ImageView(this);
			if(i==0)
				images[0].setBackgroundResource(R.drawable.btn_radio_on_holo_dark);
			else
				images[i].setBackgroundResource(R.drawable.btn_radio_on_disabled_holo_dark);
			//将小图标添加到ViewGroup中
			viewGroup.addView(images[i]);
		}
		//返回集合
		return views;
	}
	/**
	 * 创建消息处理机制
	 */
	private Handler handler=new Handler(){
		public void handleMessage(android.os.Message msg) {
			viewPager.setCurrentItem(msg.what);
		};
	};
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用ViewPager实现轮播图的步骤如下: 1. 在布局文件中添加ViewPager控件和指示器(可选)。 ```xml <androidx.viewpager.widget.ViewPager android:id="@+id/view_pager" android:layout_width="match_parent" android:layout_height="200dp" /> <LinearLayout android:id="@+id/indicator_layout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:orientation="horizontal" /> ``` 2. 创建一个PagerAdapter,设置数据源和页面布局。 ```java public class MyPagerAdapter extends PagerAdapter { private List<Integer> mData; private LayoutInflater mInflater; public MyPagerAdapter(Context context, List<Integer> data) { mData = data; mInflater = LayoutInflater.from(context); } @Override public int getCount() { return mData.size(); } @Override public boolean isViewFromObject(@NonNull View view, @NonNull Object object) { return view == object; } @NonNull @Override public Object instantiateItem(@NonNull ViewGroup container, int position) { View view = mInflater.inflate(R.layout.item_pager, container, false); ImageView imageView = view.findViewById(R.id.image_view); imageView.setImageResource(mData.get(position)); container.addView(view); return view; } @Override public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { container.removeView((View) object); } } ``` 3. 绑定PagerAdapter和ViewPager,并设置ViewPager的滑动监听,以便更新指示器。 ```java ViewPager viewPager = findViewById(R.id.view_pager); MyPagerAdapter adapter = new MyPagerAdapter(this, mData); viewPager.setAdapter(adapter); LinearLayout indicatorLayout = findViewById(R.id.indicator_layout); for (int i = 0; i < mData.size(); i++) { View indicator = new View(this); int size = getResources().getDimensionPixelSize(R.dimen.indicator_size); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(size, size); lp.leftMargin = i == 0 ? 0 : getResources().getDimensionPixelSize(R.dimen.indicator_margin); indicator.setLayoutParams(lp); indicator.setBackgroundResource(R.drawable.indicator_bg); indicatorLayout.addView(indicator); } viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { super.onPageSelected(position); for (int i = 0; i < mData.size(); i++) { View indicator = indicatorLayout.getChildAt(i); indicator.setSelected(i == position); } } }); ``` 其中,item_pager布局文件中只包含一个ImageView控件,用于显示图片。indicator_bg是指示器的背景,可以自定义。 以上就是使用ViewPager实现轮播图的主要步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小老虎Love

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值