`
zhangfy068
  • 浏览: 148416 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

(转)ViewPager使用

 
阅读更多
package com.example.testviewpagerandtabhost;

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


import android.os.Bundle;
import android.os.Parcelable;
import android.app.Activity;
import android.app.LocalActivityManager;
import android.content.Context;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
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.Menu;
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.TabHost;
import android.widget.TextView;

public class MainActivity extends Activity {

	Context context = null;
	LocalActivityManager manager = null;
	ViewPager pager = null;
	TextView t1,t2,t3;
	
	private int offset = 0;// 动画图片偏移量
	private int currIndex = 0;// 当前页卡编号
	private int bmpW;// 动画图片宽度
	private ImageView cursor;// 动画图片

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		context = MainActivity.this;
		manager = new LocalActivityManager(this , true);
		manager.dispatchCreate(savedInstanceState);

		InitImageView();
		initTextView();
		initPagerViewer();

	}
	/**
	 * 初始化标题
	 */
	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));
		
	}
	/**
	 * 初始化PageViewer
	 */
	private void initPagerViewer() {
		pager = (ViewPager) findViewById(R.id.viewpage);
		final ArrayList<View> list = new ArrayList<View>();
		Intent intent = new Intent(context, A.class);
		list.add(getView("A", intent));
		Intent intent2 = new Intent(context, B.class);
		list.add(getView("B", intent2));
		Intent intent3 = new Intent(context, C.class);
		list.add(getView("C", intent3));

		pager.setAdapter(new MyPagerAdapter(list));
		pager.setCurrentItem(0);
		pager.setOnPageChangeListener(new MyOnPageChangeListener());
	}
	/**
	 * 初始化动画
	 */
	private void InitImageView() {
		cursor = (ImageView) findViewById(R.id.cursor);
		bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.roller)
		.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);// 设置动画初始位置
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}
	/**
	 * 通过activity获取视图
	 * @param id
	 * @param intent
	 * @return
	 */
	private View getView(String id, Intent intent) {
		return manager.startActivity(id, intent).getDecorView();
	}

	/**
	 * Pager适配器
	 */
	public class MyPagerAdapter extends PagerAdapter{
		List<View> list =  new ArrayList<View>();
		public MyPagerAdapter(ArrayList<View> list) {
			this.list = list;
		}

		@Override
		public void destroyItem(ViewGroup container, int position,
				Object object) {
			ViewPager pViewPager = ((ViewPager) container);
			pViewPager.removeView(list.get(position));
		}

		@Override
		public boolean isViewFromObject(View arg0, Object arg1) {
			return arg0 == arg1;
		}

		@Override
		public int getCount() {
			return list.size();
		}
		@Override
		public Object instantiateItem(View arg0, int arg1) {
			ViewPager pViewPager = ((ViewPager) arg0);
			pViewPager.addView(list.get(arg1));
			return list.get(arg1);
		}

		@Override
		public void restoreState(Parcelable arg0, ClassLoader arg1) {

		}

		@Override
		public Parcelable saveState() {
			return null;
		}

		@Override
		public void startUpdate(View arg0) {
		}
	}
	/**
	 * 页卡切换监听
	 */
	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 onPageScrollStateChanged(int arg0) {
			 //状态有三个0空闲,1是增在滑行中,2目标加载完毕
			//public static final int SCROLL_STATE_IDLE = 0;
			//public static final int SCROLL_STATE_DRAGGING = 1;
			//public static final int SCROLL_STATE_SETTLING = 2;

		}
		//从页面1滚动到2的过程
		@Override
		public void onPageScrolled(int arg0, float arg1, int arg2) {
			
		}
	}
	/**
	 * 头标点击监听
	 */
	public class MyOnClickListener implements View.OnClickListener {
		private int index = 0;

		public MyOnClickListener(int i) {
			index = i;
		}

		@Override
		public void onClick(View v) {
			pager.setCurrentItem(index);
		}
	};
}

 

 

主要时获取不同intent的视图。。 然后切换的的时候,将该视图增加到ViewPager中,切换下一个的时候移除本ViewPager。



 

  • 大小: 39.2 KB
分享到:
评论

相关推荐

    Android ViewPager使用详解

    在标题“Android ViewPager使用详解”和描述中提到,ViewPager是Google为兼容低版本Android设备提供的软件包的一部分,它在Android 3.0及以上版本的API中引入。以下是对ViewPager的详细使用方法和相关知识点的说明:...

    ViewPager旋转引导页

    【ViewPager旋转引导页】是一种常见的应用欢迎界面设计,它利用Android平台中的ViewPager组件结合动态效果,为用户展示一系列引人入胜的页面,通常用于初次使用应用时介绍关键功能或特性。这种引导页的设计旨在提升...

    ViewPagerTransfomer(可翻转的ViewPager等)

    综上所述,通过使用ViewPagerTransformer,开发者可以轻松地为应用程序的ViewPager添加各种酷炫的页面转换效果,提高用户交互的趣味性和应用程序的品质。无论是在信息展示、图像浏览还是游戏场景中,这种技术都能...

    玩转ViewPager指示器字体变色

    在这个案例中,我们使用了名为"ColorTrackTextView"的自定义控件,它具有动态改变字体颜色的能力。 ColorTrackTextView可能是这样一个类,它继承自TextView,并且重写了相关方法以实现字体颜色的变换。我们可以为每...

    ListView头视图为自动播放的ViewPager

    通常,ViewPager会和PagerAdapter一起使用,PagerAdapter负责管理页面的创建和销毁,以节省内存。通过设置PageTransformer,还可以实现各种酷炫的滑动效果。在这个项目中,ViewPager被用作ListView头部的视图,显示...

    Android自定义引导玩转ViewPager的方法详解

    基础的ViewPager使用虽然简单,但功能相对有限。为了增强用户体验,我们可以实现一些进阶特性,比如添加跟随式小圆点指示器。这些小圆点通常用于表示当前页面在所有页面中的位置,给用户视觉上的反馈。 实现跟随式...

    ViewPager的简单使用

    在Android开发中,掌握ViewPager的使用对于提升用户体验至关重要。 首先,我们需要了解ViewPager的基本结构。ViewPager继承自ViewGroup,它通过Adapter来加载和管理多个页面。每个页面通常是一个Fragment或者一个...

    ViewPager和Fragment的结合使用

    在Android应用开发中,ViewPager和Fragment是两个非常重要的组件,它们常常被结合使用来实现丰富的用户界面和交互体验。ViewPager允许用户左右滑动查看多个页面,而Fragment则为应用程序提供了模块化屏幕区域,使得...

    Android应用源码之ViewPager使用不错的代码.zip

    【Android应用源码之ViewPager使用不错的代码】 在Android开发中,ViewPager是一个强大的组件,它允许用户在多个全屏页面之间滑动浏览。这个压缩包文件包含的源代码着重展示了如何在实际应用中有效地使用ViewPager...

    android的ViewPager和Animation的一些使用

    这篇博客"android的ViewPager和Animation的一些使用"详细介绍了如何在应用中有效地结合这两个组件,以提升用户体验。 首先,`ViewPager`是Android SDK中的一个视图容器,它允许用户通过水平滑动来浏览多个页面。`...

    重写ViewPager修改滑动灵敏度

    1. 创建一个自定义的ViewPager类,继承自Android提供的`android.support.v4.view.ViewPager`(如果使用AndroidX库,则为`androidx.viewpager.widget.ViewPager`)。 2. 在自定义的ViewPager类中,我们需要覆盖`...

    viewPager

    在Android开发中,理解和掌握`ViewPager`的工作原理和使用方式对于提升用户体验至关重要。 `ViewPager`的核心功能在于提供了一个可以左右滑动查看多个视图(View)的容器。它可以自动处理页面的滑动动画,使得用户...

    android viewpager各种滑动动画

    首先,ViewPager的基本使用涉及到以下几个关键概念: 1. **PagerAdapter**:这是ViewPager的数据适配器,负责提供页面内容。通常我们需要继承`PagerAdapter`或其子类如`FragmentPagerAdapter`和`...

    三种ViewPager切换动画

    ViewPager通常与PagerAdapter一起使用,PagerAdapter是PagerAdapter接口的一个实现,用于为ViewPager提供页面内容。你需要重写`instantiateItem()`和`destroyItem()`方法来创建和销毁页面视图。同时,别忘了设置...

    VIewPager特效综合例子

    `ViewPager`是Android开发中一个非常重要的组件,主要用于在有限的空间内展示多个页面,并且可以实现...对于初学者来说,这是一个很好的实践和学习资源,能够帮助理解`ViewPager`的使用和自定义,提升Android开发技能。

    Android 自定义 ViewPager 打造千变万化的图片切换效果

    "Android 自定义 ViewPager 打造千变万化的图片切换效果"这个主题,主要是探讨如何通过扩展Android的ViewPager或者使用像Jazzy ViewPager这样的第三方库,来创建更具视觉吸引力的图片滑动体验。 首先,自定义...

    android ViewPager的使用

    本篇文章将深入探讨如何在Android应用中有效地使用ViewPager及其相关的动画效果。 首先,我们来了解ViewPager的基本用法。ViewPager是Android Support Library中的一个组件,可以通过在布局XML文件中添加`...

    简单的ViewPager实现

    - 如果在Fragment中使用ViewPager,确保正确处理生命周期,避免在`onCreateView()`或`onActivityCreated()`中直接初始化ViewPager。 通过上述步骤,你就可以实现一个基本的ViewPager实例。但ViewPager的功能远不止...

    高大上的ViewPager的PageTransformer

    综上所述,通过使用PageTransformer,开发者可以为ViewPager添加各种炫酷的页面切换动画,提升应用的视觉吸引力和用户体验。记住,恰当的动画可以增强用户的沉浸感,但也要注意不要过度使用,以免分散用户的注意力。

Global site tag (gtag.js) - Google Analytics