网上看到viewpager的多view动画切换,模仿制作了一个  学习到了。

先看效果图:

    

先看主类的layout

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="#222222" > <LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" > <TextView
android:id="@+id/textView1"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:background="#999999"
android:gravity="center"
android:text="页面1"
android:textColor="#222222"
/>
<TextView
android:id="@+id/textView2"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:background="#999999"
android:gravity="center"
android:text="页面2"
android:textColor="#222222"
/>
<TextView
android:id="@+id/textView3"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:background="#999999"
android:gravity="center"
android:text="页面3"
android:textColor="#222222"
/>
</LinearLayout>
<ImageView
android:id="@+id/cursor"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scaleType="matrix"
android:src="@drawable/cursor"
android:background="#222222"/>
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/> </LinearLayout>

viewPager需要一个pagerAdapter的子类

package com.example.myview;

import java.util.List;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.support.v4.view.ViewPager; public class MyAdapter extends PagerAdapter{ List<View> viewLists; public MyAdapter(List<View> lists)
{
viewLists = lists;
} @Override
public int getCount() { //获得size
// TODO Auto-generated method stub
return viewLists.size();
} @Override
public boolean isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return arg0 == arg1;
} @Override
public void destroyItem(View view, int position, Object object) //销毁Item
{
((ViewPager) view).removeView(viewLists.get(position));
} @Override
public Object instantiateItem(View view, int position) //实例化Item
{
((ViewPager) view).addView(viewLists.get(position), 0);
return viewLists.get(position);
} }

最后Main类

package com.example.myview;

import java.util.List;
import java.util.ArrayList;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.widget.TextView;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.DisplayMetrics;
import android.graphics.Matrix;
import android.widget.ImageView;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation; public class MainActivity extends Activity { private ViewPager viewPager;
private ImageView imageView;
private List<View> lists = new ArrayList<View>();
private MyAdapter myAdapter;
private Bitmap cursor;
private int offSet;
private int currentItem;
private Matrix matrix = new Matrix();
private int bmWidth;
private Animation animation;
private TextView textView1;
private TextView textView2;
private TextView textView3; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); imageView = (ImageView) findViewById (R.id.cursor);
textView1 = (TextView) findViewById (R.id.textView1);
textView2 = (TextView) findViewById (R.id.textView2);
textView3 = (TextView) findViewById (R.id.textView3); lists.add(getLayoutInflater().inflate(R.layout.layout1, null));
lists.add(getLayoutInflater().inflate(R.layout.layout2, null));
lists.add(getLayoutInflater().inflate(R.layout.layout3, null)); initeCursor(); myAdapter = new MyAdapter(lists); viewPager = (ViewPager) findViewById (R.id.viewPager);
viewPager.setAdapter(myAdapter);
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override
public void onPageSelected(int arg0) { //当滑动式,顶部的imageView是通过animation缓慢的滑动
// TODO Auto-generated method stub
switch (arg0)
{
case 0:
if (currentItem == 1)
{
animation = new TranslateAnimation(
offSet * 2 + bmWidth, 0 , 0, 0);
}
else if(currentItem == 2)
{
animation = new TranslateAnimation(
offSet * 4 + 2 * bmWidth, 0, 0, 0);
}
break;
case 1:
if (currentItem == 0)
{
animation = new TranslateAnimation(
0, offSet * 2 + bmWidth, 0, 0);
}
else if (currentItem == 2)
{
animation = new TranslateAnimation(
4 * offSet + 2 * bmWidth, offSet * 2 + bmWidth, 0, 0);
}
break;
case 2:
if (currentItem == 0)
{
animation = new TranslateAnimation(
0, 4 * offSet + 2 * bmWidth, 0, 0);
}
else if (currentItem == 1)
{
animation = new TranslateAnimation(
offSet * 2 + bmWidth, 4 * offSet + 2 * bmWidth, 0, 0);
}
}
currentItem = arg0; animation.setDuration(500);
animation.setFillAfter(true);
imageView.startAnimation(animation); } @Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub } @Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub }
}); textView1.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
viewPager.setCurrentItem(0);
}
}); textView2.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
viewPager.setCurrentItem(1);
}
}); textView3.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
viewPager.setCurrentItem(2);
}
});
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
} private void initeCursor()
{
cursor = BitmapFactory.decodeResource(getResources(), R.drawable.cursor);
bmWidth = cursor.getWidth(); DisplayMetrics dm;
dm = getResources().getDisplayMetrics(); offSet = (dm.widthPixels - 3 * bmWidth) / 6;
matrix.setTranslate(offSet, 0);
imageView.setImageMatrix(matrix); //需要iamgeView的scaleType为matrix
currentItem = 0;
}
}

类外还有3个layout:layout1,layout2, layout3是最简单,就是定义了不同的背景颜色,这里不给出。

android--多View切换viewpager的更多相关文章

  1. Android自定义View——自定义ViewPager

      第一部分:自定义ViewGroup的使用,手势识别器和Scroller滑动 第二部分:处理滑动监听,处理滑动冲突,增加ViewPager的指示器   常见的滑动冲突:外部滑动方向和内部滑动方向不一 ...

  2. Android 自定义View合集

    自定义控件学习 https://github.com/GcsSloop/AndroidNote/tree/master/CustomView 小良自定义控件合集 https://github.com/ ...

  3. Android开发--页面切换

    1.创建android项目.项目文档如下 2.activity_main布局,Androidv4包里自带的,既然是自带的那么直接拿来用就可以了,当然前提是你得工程里有v4包 <LinearLay ...

  4. Android 主题动态切换框架:Prism

    Prism(棱镜) 是一个全新的 Android 动态主题切换框架,虽然是头一次发布,但它所具备的基础功能已经足够强大了!本文介绍了 Prism 的各种用法,希望对你会有所帮助,你也可以对它进行扩展, ...

  5. Android中启动页ViewPager和ViewFlipper带指示器

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   首先我们来分析一下,想要实现启动页的功能,大家第一个想到的就是使用ViewPager,使用ViewPager确实是一种比 ...

  6. Android捕获View焦点事件,LinearLayout结合HorizontalScrollView实现ViewPgaer和选项卡Tabs联动

     <Android捕获View焦点事件,LinearLayout结合HorizontalScrollView实现ViewPgaer和选项卡Tabs联动.> 如图: package zh ...

  7. Android 自定义 View 详解

    View 的绘制系列文章: Android View 绘制流程之 DecorView 与 ViewRootImpl Android View 的绘制流程之 Measure 过程详解 (一) Andro ...

  8. android: 结合BottomNavigationView、ViewPager和Fragment 实现左右滑动的效果

    主界面:MainActivity package com.yongdaimi.android.androidapitest; import android.os.Bundle; import andr ...

  9. Android横竖屏切换及其对应布局加载问题

    第一,横竖屏切换连带横竖屏布局问题: 如果要让软件在横竖屏之间切换,由于横竖屏的高宽会发生转换,有可能会要求不同的布局. 可以通过以下两种方法来切换布局: 1)在res目录下建立layout-land ...

随机推荐

  1. HDU1058Humble Numbers

     Humble Numbers Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u     ...

  2. SQLite中的日期基础

    SQLite包含了如下时间/日期函数: datetime().......................产生日期和时间 date()...........................产生日期 t ...

  3. 上海9000辆出租车上铺设免费微信连WiFi

    据了解,去年7月,2000辆贴有Wi-Fi标识的上海大众出租车已经正式上路.近期,为了加大方便市民的力度,上海云联将上海大众等9000辆出租车上铺设免费微信连WiFi,为上海乘客提供简单便捷的微信连W ...

  4. vs2010把项目资源打包成系统资源

      把wav格式的音频做成系统资源,根据条件播放相应的音频  System.Media.SoundPlayer spOne = new System.Media.SoundPlayer();      ...

  5. Docker 面临的安全隐患,我们该如何应对

    [编者按]对比虚拟机,Docker 在体量等方面拥有显著的优势.然而,当 DevOps 享受 Docker 带来扩展性.资源利用率和弹性提升的同时,其所面临的安全隐患同样值得重视,近日 Chris T ...

  6. [译]如何使用 Docker 组件开发 Django 项目?

    原文地址:Django Development With Docker Compose and Machine 以下为译文 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包 ...

  7. NodeJS介绍

    1.概述: Node.js是基于Chrome JavaScript运行时建立的一个平台,实际上它是对Google Chrome V8引擎进行了封装,它主要用于创建快速的.可扩展的网络应用.Node.j ...

  8. ExtJS之Ext.getDom

    <!DOCTYPE html> <html> <head> <title>ExtJs</title> <meta http-equiv ...

  9. Tomcat SSL 设置

    1. 先用如下命令生成tomcat 证书 cls rem please set the env JAVA_HOME before run this bat file SET JAVA_HOME=C:\ ...

  10. 关于在linux下清屏的几种技巧

    在windows的DOS操作界面里面,清屏的命令是cls,那么在linux 里面的清屏命令是什么呢?下面笔者分享几种在linux下用过的清屏方法. 1.clear命令.这个命令将会刷新屏幕,本质上只是 ...