zoukankan      html  css  js  c++  java
  • ViewPager实现页面切换

    先贴效果图(每个开关Tab债券。尾随页变化。效果图蓝条添加的用户体验)


    首先看总体效果图的布局文件吧(非常easy,就三部分,各自是Tab栏目、定位蓝条、各个页面(是V4包下的ViewPager))

    activity_tab_winter_main.xml

    <?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:background="#FF969696" android:orientation="vertical" > <LinearLayout android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="45.0dip" android:background="#FFDFD7D7" > <TextView android:id="@+id/text1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1.0" android:gravity="center" android:text=" 广告" android:textColor="#000000" /> <TextView android:id="@+id/text2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1.0" android:gravity="center" android:text=" 选项" android:textColor="#000000" /> <TextView android:id="@+id/text3" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1.0" android:gravity="center" android:text=" 关于作者" android:textColor="#000000" /> </LinearLayout> <ImageView android:id="@+id/cursor" android:layout_width="fill_parent" android:layout_height="wrap_content" android:scaleType="matrix" android:src="@drawable/icon_tab_winter_a" /> <android.support.v4.view.ViewPager android:id="@+id/vPager" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_gravity="center" android:layout_weight="1.0" android:background="#FFDFD7D7" android:flipInterval="30" android:persistentDrawingCache="animation" /> </LinearLayout>

    接下来贴出每一个页面的布局文件

    activity_tab_winter_lay1.xml--activity_tab_winter_lay2.xml---activity_tab_winter_lay3.xml(三个页面是一样的,就是text内容不一样。这样好区分)

    <?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:background="#FFDFD7D7"
        android:orientation="vertical" >
    
            <Button
            android:id="@+id/btn"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:gravity="center"
            android:text="广告" />
    </LinearLayout>

    MainActivity(思路简单,代码有凝视)

    package com.example.viewpagerdemo;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.content.DialogInterface;
    import android.graphics.BitmapFactory;
    import android.graphics.Matrix;
    import android.os.Bundle;
    import android.os.Parcelable;
    import android.support.v4.view.PagerAdapter;
    import android.support.v4.view.ViewPager;
    import android.support.v4.view.ViewPager.OnPageChangeListener;
    import android.util.DisplayMetrics;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.view.animation.Animation;
    import android.view.animation.TranslateAnimation;
    import android.widget.Button;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    public class MainActivity extends Activity {
    	private ViewPager mPager;// 页卡内容
    	private List<View> listViews; // Tab页面列表
    	
    	private TextView t1, t2, t3;// 页卡头标
    	private int currIndex = 0;// 当前页卡编号
    	
    	private ImageView cursor;// 动绘图片
    	private int bmpW;// 动绘图片宽度
    	private int offset = 0;// 动绘图片偏移量
    
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_tab_winter_main);
    		//初始化三部分
    		InitImageView();
    		InitTextView();
    		InitViewPager();
    	}
    	/**
    	 * 初始化动画
    	 */
    	private void InitImageView() {
    		//获取空间
    		cursor = (ImageView) findViewById(R.id.cursor);
    		// 获取图片宽度
    		bmpW = BitmapFactory.decodeResource(getResources(),
    				R.drawable.icon_tab_winter_a).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);
    	}
    	/**
    	 * 初始化头标
    	 */
    	private void InitTextView() {
    		t1 = (TextView) findViewById(R.id.text1);
    		t2 = (TextView) findViewById(R.id.text2);
    		t3 = (TextView) findViewById(R.id.text3);
    
    		//加入监听事件
    		t1.setOnClickListener(new MyOnClickListener(0));
    		t2.setOnClickListener(new MyOnClickListener(1));
    		t3.setOnClickListener(new MyOnClickListener(2));
    	}
    
    	/**
    	 * 初始化ViewPager
    	 */
    	private void InitViewPager() {
    		//viewPager
    		mPager = (ViewPager) findViewById(R.id.vPager);
    		//data
    		listViews = new ArrayList<View>();
    		LayoutInflater mInflater = getLayoutInflater();
    		listViews.add(mInflater
    				.inflate(R.layout.activity_tab_winter_lay2, null));
    		listViews.add(mInflater
    				.inflate(R.layout.activity_tab_winter_lay1, null));
    		listViews.add(mInflater
    				.inflate(R.layout.activity_tab_winter_lay3, null));
    		//adapter
    		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 view, int position, Object arg2) {
    			((ViewPager) view).removeView(mListViews.get(position));
    		}
    
    		@Override
    		public void finishUpdate(View arg0) {
    		}
    
    		@Override
    		public int getCount() {
    			return mListViews.size();
    		}
    
    		@Override
    		public Object instantiateItem(ViewGroup container, int position) {
    			container.addView(mListViews.get(position));
    			return mListViews.get(position);
    		}
    
    		@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) {
    		}
    	}
    
    	/**
    	 * 头标点击监听
    	 */
    	public class MyOnClickListener implements View.OnClickListener {
    		private int index = 0;
    
    		public MyOnClickListener(int i) {
    			index = i;
    		}
    
    		public void onClick(View v) {
    			mPager.setCurrentItem(index);
    		}
    	};
    
    	/**
    	 * 页卡切换监听
    	 */
    	public class MyOnPageChangeListener implements OnPageChangeListener {
    
    		int one = offset * 2 + bmpW;// 页卡1 -> 页卡2 偏移量
    		int two = one * 2;// 页卡1 -> 页卡3 偏移量
    
    		public void onPageSelected(int position) {
    			Animation animation = null;
    			switch (position) {
    			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 = position;
    			animation.setFillAfter(true);
    			animation.setDuration(300);
    			cursor.startAnimation(animation);
    		}
    
    		public void onPageScrolled(int arg0, float arg1, int arg2) {
    		}
    
    		public void onPageScrollStateChanged(int arg0) {
    		}
    	}
    }



  • 相关阅读:
    BZOJ3105: [cqoi2013]新Nim游戏 博弈论+线性基
    BZOJ3759: Hungergame 博弈论+线性基
    NOI模拟赛Day2
    期望dp BZOJ3450+BZOJ4318
    NOI模拟赛 Day1
    NOI模拟 热身赛T1
    【BZOJ4260】 Codechef REBXOR 可持久化Trie
    【BZOJ3673】&&【BZOJ3674】: 可持久化并查集 by zky 可持久化线段树
    【BZOJ3207】花神的嘲讽计划I 可持久化线段树/莫队
    【bzoj3527】[Zjoi2014]力 FFT
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4737782.html
Copyright © 2011-2022 走看看