android viewpaper实例探讨

 更新时间:2012年12月03日 09:39:18   作者:  
本文将提供一个android viewpaper实例实现过程,需要了解更多的朋友可以参考下

一、首先,我们来看一下效果图,这是新浪微博的Tab滑动效果。我们可以手势滑动,也可以点击上面的头标进行切换。与此同方式,白色横条会移动到相应的页卡头标下。这是一个动画效果,白条是缓慢滑动过去的。好了,接下来我们就来实现它。

二、在开始前,我们先要认识一个控件,ViewPager。它是google SDk中自带的一个附加包的一个类,可以用来实现屏幕间的切换。这个附加包是android-support-v4。jar,在最后的源码中会提供给大 家,在libs文件夹中。当然你也可以自己从网上搜索最新的版本。找到它后,我们需要在项目中添加

三、我们先做界面, 界面设计很简单,第一行三个头标,第二行动画图片,第三行页卡内容展示。

复制代码 代码如下:

<?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/text1"
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/text2"
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/text3"
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:src="@drawable/a" />
<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>

我们要展示三个页卡,所以还需要三个页卡内容的界面设计,这里我们只设置了背景颜色,能起到区别作用即可。
复制代码 代码如下:

<?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="#158684" >
</LinearLayout>

四、代码部分要进行初始化的工作 (1) 先来变量的定义
复制代码 代码如下:

private ViewPager mPager;//页卡内容
private List<View> listViews; // Tab页面列表
private ImageView cursor;// 动画图片
private TextView t1, t2, t3;// 页卡头标
private int offset = 0;// 动画图片偏移量
private int currIndex = 0;// 当前页卡编号
private int bmpW;// 动画图片宽度

(2) 初始化头标
复制代码 代码如下:

/**
* 初始化头标
*/
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));
}
/**
* 头标点击监听
*/
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);
}
};

(3) 初始化页卡内容区
复制代码 代码如下:

<font color="#008000"><font color="black">  /**
  * 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) {
  }
  }
</font></font>
这里我们实现了各页卡的装入和卸载 (4) 初始化动画
/**
* 初始化动画
*/
private void InitImageView() {
cursor = (ImageView) findViewById(R.id.cursor);
bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.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);// 设置动画初始位置
}

根据屏幕的分辨率和图片的宽度计算动画移动的偏移量   
复制代码 代码如下:

/**   * 页卡切换监听   */   
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) {   }   }

五、打完收工,快来看看自己的劳动成果吧

相关文章

  • Android 调试工具用法详细介绍

    Android 调试工具用法详细介绍

    本文主要介绍Android 调试工具,在Android应用开发的过程中肯定会用到Android 调试工具,这里整理了调试工具的使用方法,有需要的小伙伴可以参考下
    2016-08-08
  • Android Studio快捷键生成TAG、Log.x日志输出介绍

    Android Studio快捷键生成TAG、Log.x日志输出介绍

    这篇文章主要介绍了Android Studio快捷键生成TAG、Log.x日志输出介绍,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • android实现文字水印效果 支持多行水印

    android实现文字水印效果 支持多行水印

    这篇文章主要为大家详细介绍了android添加文字水印,并支持多行水印,自定义角度和文字大小,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-10-10
  • Android 7.0应用之间如何共享文件

    Android 7.0应用之间如何共享文件

    这篇文章主要介绍了Android 7.0应用之间如何共享文件,帮助大家更好的理解和使用Android进行开发,感兴趣的朋友可以了解下
    2020-12-12
  • Android条目拖拽删除功能实例代码

    Android条目拖拽删除功能实例代码

    最近做项目遇到这样的需求,要做条目条目拖拽删除效果,实际效果和QQ消息删除一样,侧滑有制定和删除,下面通过本文给大家分享Android条目拖拽删除功能,需要的朋友参考下吧
    2017-08-08
  • Android 中 WebView 的基本用法详解

    Android 中 WebView 的基本用法详解

    这篇文章主要介绍了Android 中 WebView 的基本用法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • android选项卡TabHost功能用法详解

    android选项卡TabHost功能用法详解

    这篇文章主要为大家详细介绍了android选项卡TabHost的功能用法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • 详解Android studio如何导入jar包方法

    详解Android studio如何导入jar包方法

    这篇内容主要给大家详细说明了如何导入jar包,以及Android studio遇到的各种问题和解决办法。
    2017-12-12
  • Android开发必备知识 为什么说Kotlin值得一试

    Android开发必备知识 为什么说Kotlin值得一试

    为什么说值得一试,这篇文章主要为大家详细介绍了Android开发必备知识,Kotlin的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • Android使用CountDownTimer类实现倒计时闹钟

    Android使用CountDownTimer类实现倒计时闹钟

    这篇文章主要为大家详细介绍了Android使用CountDownTimer类实现倒计时闹钟,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01

最新评论