• android: ViewPager滑动切换Activity


    ViewPager非常适合用于实现多页面的滑动切换效果
    相同的多页面切换可以是TabHost,但是tabhost标题栏需要重写,稍微麻烦一点
    所以采用ViewPager来实现滑动切换,网上很多都是使用ViewPager来加载View,做一些静态的页面展示,像导航,图片展示,使用教程等等
    下面实现ViewPager滑动切换Activity
     由于是Google的兼容包类库所以一定要在工程中导入  android-support-v4.jar

    效果图

     

    切换的时候非常流畅。

    下面上主要的代码。

    主页布局 activity_main.xml

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     android:background="#EEEEEE"
     6     android:orientation="vertical" >
     7 
     8     <LinearLayout
     9         android:id="@+id/linearLayout1"
    10         android:layout_width="fill_parent"
    11         android:layout_height="40.0dip"
    12         android:background="#EEEEEE" >
    13 
    14         <TextView
    15             android:id="@+id/text1"
    16             android:layout_width="fill_parent"
    17             android:layout_height="fill_parent"
    18             android:layout_weight="1.0"
    19             android:gravity="center"
    20             android:text="标题1"
    21             android:textColor="#000000"
    22             android:textSize="18.0dip" />
    23 
    24         <TextView
    25             android:id="@+id/text2"
    26             android:layout_width="fill_parent"
    27             android:layout_height="fill_parent"
    28             android:layout_weight="1.0"
    29             android:gravity="center"
    30             android:text="标题2"
    31             android:textColor="#000000"
    32             android:textSize="18.0dip" />
    33 
    34         <TextView
    35             android:id="@+id/text3"
    36             android:layout_width="fill_parent"
    37             android:layout_height="fill_parent"
    38             android:layout_weight="1.0"
    39             android:gravity="center"
    40             android:text="标题3"
    41             android:textColor="#000000"
    42             android:textSize="18.0dip" />
    43     </LinearLayout>
    44 
    45     <ImageView
    46         android:id="@+id/cursor"
    47         android:layout_width="fill_parent"
    48         android:layout_height="wrap_content"
    49         android:background="#EEEEEE"
    50         android:scaleType="matrix"
    51         android:src="@drawable/roller" />
    52 
    53     <android.support.v4.view.ViewPager
    54         android:id="@+id/viewpage"
    55         android:layout_width="match_parent"
    56         android:layout_height="match_parent" />
    57 
    58 </LinearLayout>

    Activity文件 MainActivity.java

    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;
        TabHost tabHost = 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) {
                
            }
    
            @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);
            }
        };
    }

    然后是page对应的activity和xml文件

    例如A.java  a.xml

    package com.example.testviewpagerandtabhost;
    
    import android.app.Activity;
    import android.os.Bundle;
    
    public class A extends Activity{
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.a);
        }
    }
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="#FF9900"
        android:orientation="vertical" >
    
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:text="AAAAAAAAAAAA" />
    
    </RelativeLayout>

     PagerViewer加载静态View可以很容易实现,一般流程如下

    1         mPager = (ViewPager) findViewById(R.id.vPager);
    2         listViews = new ArrayList<View>();
    3         LayoutInflater mInflater = getLayoutInflater();
    4         listViews.add(mInflater.inflate(R.layout.mo1, null));
    5         listViews.add(mInflater.inflate(R.layout.mo2, null));
    6         listViews.add(mInflater.inflate(R.layout.mo3, null));
    7         mPager.setAdapter(new MyPagerAdapter(listViews));
    8         mPager.setCurrentItem(0);
    9         mPager.setOnPageChangeListener(new MyOnPageChangeListener());

    加载Activity需要使用到上面提供的LocalActivityManager类

    manager.startActivity(id, intent).getDecorView(); // 一看就知道什么意思..

    来源:根据网上流传代码修改..

    源码:http://download.csdn.net/detail/mathore/4690978

  • 相关阅读:
    Spring中的Type学习
    Spring发布监听机制
    BeanFactory父子容器的知识
    Spring中自动创建代理器
    ProxyConfig属性详解
    BeanFactoryAdvisorRetrievalHelper:从Bean工厂检索出Advisor们
    代理机制
    Spring AOP组件
    @Value的使用
    BeanPostProcessor原理--使用讲解
  • 原文地址:https://www.cnblogs.com/skiz/p/2741649.html
Copyright © 2020-2023  润新知