ViewPager的实现

在安卓开发中界面的设计有一个比较常用,就是类似于滑动和点击更换界面。在android-support-v4.jar包中。

实现ViewPager很简单只需几个关键的步骤就可以。需要给ViewPager设置一个数据适配器,继承PagerAdapter。



package com.example.chatone;

import java.util.ArrayList;
import java.util.List;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.os.Bundle;
import android.os.Parcelable;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;
import android.widget.TextView;
import android.os.Build;

public class MainActivity extends ActionBarActivity {

	private ViewPager mPager;
	private List<View> listViews;
	private ImageView cursor;
	private TextView t1;
	private TextView t2;
	private TextView t3;
	//动画图片偏移量
	private int offset=0;
    //当前页卡编号
	private int currIndex=0;
	//动画页面宽度
	private int bmpW;
	
	
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
        t1=(TextView)findViewById(R.id.t1);
        t2=(TextView)findViewById(R.id.t2);
        t3=(TextView)findViewById(R.id.t3);
        
        t1.setOnClickListener(new MyOnClickListener(0));
        t2.setOnClickListener(new MyOnClickListener(1));
        t3.setOnClickListener(new MyOnClickListener(2));
        InitImageView();
        InitViewPager();
	}

	/**
	      * 头标点击监听
	 */
	     public class MyOnClickListener implements View.OnClickListener {
	         private int index = 0;
	  
	         public MyOnClickListener(int i) {
	             index = i;
	         }
	  
	         @Override
	         public void onClick(View v) {
	             mPager.setCurrentItem(index);
	         }
	     };
	     /**
	      * 初始化ViewPager
	 */
	     private void InitViewPager() {
	         mPager = (ViewPager) findViewById(R.id.vPager);
	         listViews = new ArrayList<View>();
	         LayoutInflater mInflater = getLayoutInflater();
	         listViews.add(mInflater.inflate(R.layout.list, null));
	         listViews.add(mInflater.inflate(R.layout.list2, null));
	         listViews.add(mInflater.inflate(R.layout.list3, null));
	         mPager.setAdapter(new MyPagerAdapter(listViews));
	         mPager.setCurrentItem(0);
	         mPager.setOnPageChangeListener(new MyOnPageChangeListener());
	     }

	     /**
	      * ViewPager适配器
	 */
	     public class MyPagerAdapter extends PagerAdapter {
	         public List<View> mListViews;
	  
	         public MyPagerAdapter(List<View> mListViews) {
	             this.mListViews = mListViews;
	         }
	  
	         @Override
	         public void destroyItem(View arg0, int arg1, Object arg2) {
	             ((ViewPager) arg0).removeView(mListViews.get(arg1));
	         }
	  
	         @Override
	         public void finishUpdate(View arg0) {
	         }
	  
	         @Override
	         public int getCount() {
	             return mListViews.size();
	         }
	  
	         @Override
	         public Object instantiateItem(View arg0, int arg1) {
	             ((ViewPager) arg0).addView(mListViews.get(arg1), 0);
	             return mListViews.get(arg1);
	         }
	  
	         @Override
	         public boolean isViewFromObject(View arg0, Object arg1) {
	             return arg0 == (arg1);
	         }
	  
	         @Override
	         public void restoreState(Parcelable arg0, ClassLoader arg1) {
	         }
	  
	         @Override
	         public Parcelable saveState() {
	             return null;
	         }
	  
	         @Override
	         public void startUpdate(View arg0) {
	         }
	     }
	     /**
	      * 初始化动画
	 */
	     private void InitImageView() {
	         cursor = (ImageView) findViewById(R.id.cursor);
	         bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.mid)
	                 .getWidth();// 获取图片宽度
	         DisplayMetrics dm = new DisplayMetrics();
	         getWindowManager().getDefaultDisplay().getMetrics(dm);
	         int screenW = dm.widthPixels;// 获取分辨率宽度
	         offset = (screenW / 3 - bmpW) / 2;// 计算偏移量
	         Matrix matrix = new Matrix();
	         matrix.postTranslate(offset, 0);
	         cursor.setImageMatrix(matrix);// 设置动画初始位置
	     }
	     /**
	      * 页卡切换监听
	 */
	     public class MyOnPageChangeListener implements OnPageChangeListener {
	  
	         int one = offset * 2 + bmpW;// 页卡1 -> 页卡2 偏移量
	         int two = one * 2;// 页卡1 -> 页卡3 偏移量
	  
	         @Override
	         public void onPageSelected(int arg0) {
	             Animation animation = null;
	             switch (arg0) {
	             case 0:
	                 if (currIndex == 1) {
	                     animation = new TranslateAnimation(one, 0, 0, 0);
	                 } else if (currIndex == 2) {
	                     animation = new TranslateAnimation(two, 0, 0, 0);
	                 }
	                 break;
	             case 1:
	                 if (currIndex == 0) {
	                     animation = new TranslateAnimation(offset, one, 0, 0);
	                 } else if (currIndex == 2) {
	                     animation = new TranslateAnimation(two, one, 0, 0);
	                 }
	                 break;
	             case 2:
	                 if (currIndex == 0) {
	                     animation = new TranslateAnimation(offset, two, 0, 0);
	                 } else if (currIndex == 1) {
	                     animation = new TranslateAnimation(one, two, 0, 0);
	                 }
	                 break;
	             }
	             currIndex = arg0;
	             animation.setFillAfter(true);// True:图片停在动画结束位置
	             animation.setDuration(300);
	             cursor.startAnimation(animation);
	         }
	  
	         @Override
	         public void onPageScrolled(int arg0, float arg1, int arg2) {
	         }
	  
	         @Override
	         public void onPageScrollStateChanged(int arg0) {
	         }
	     }

}
布局文件有如下


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:umadsdk="http://schemas.android.com/apk/res/com.LoveBus"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
 
    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="fill_parent"
        android:layout_height="100.0dip"
        android:background="#FFFFFF" >
 
        <TextView
            android:id="@+id/t1"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1.0"
            android:gravity="center"
            android:text="页卡1"
            android:textColor="#000000"
            android:textSize="22.0dip" />
 
        <TextView
            android:id="@+id/t2"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1.0"
            android:gravity="center"
            android:text="页卡2"
            android:textColor="#000000"
            android:textSize="22.0dip" />
 
        <TextView
            android:id="@+id/t3"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1.0"
            android:gravity="center"
            android:text="页卡3"
            android:textColor="#000000"
            android:textSize="22.0dip" />
    </LinearLayout>
 
    <ImageView
        android:id="@+id/cursor"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:scaleType="matrix" />
 
    <android.support.v4.view.ViewPager
        android:id="@+id/vPager"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="1.0"
        android:background="#000000"
        android:flipInterval="30"
        android:persistentDrawingCache="animation" />
 
</LinearLayout>
list.xml  list2和list3和list一样,更换一下background代码就可以
</pre><pre name="code" class="java"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:background="#00E5EE" >
</LinearLayout>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现ViewPager的自动轮播,你可以按照以下步骤进行操作: 1. 首先,在布局文件中添加ViewPager控件,并设置其相关属性,如布局宽高、指示器等。 2. 在代码中,创建一个Handler对象和一个Runnable对象,用于实现自动轮播的定时任务。 ```java private ViewPager viewPager; private int currentPage = 0; private Timer timer; private final long DELAY_MS = 500; // 延迟时间 private final long PERIOD_MS = 3000; // 滚动间隔时间 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); viewPager = findViewById(R.id.viewPager); // 设置ViewPager的Adapter以及其他属性 final Handler handler = new Handler(); final Runnable runnable = new Runnable() { public void run() { if (currentPage == NUM_PAGES) { currentPage = 0; } viewPager.setCurrentItem(currentPage++, true); } }; timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { handler.post(runnable); } }, DELAY_MS, PERIOD_MS); } ``` 3. 在Activity的`onDestroy`方法中,取消定时任务,避免内存泄漏。 ```java @Override protected void onDestroy() { super.onDestroy(); if (timer != null) { timer.cancel(); timer = null; } } ``` 这样,ViewPager就会自动进行轮播了。注意,上述代码中的`NUM_PAGES`是ViewPager中页面的数量,你需要根据实际情况进行替换。另外,你还可以根据需求添加页面切换的动画效果、手势滑动等功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值