zoukankan      html  css  js  c++  java
  • Android开发--页面切换

    1、创建android项目、项目文档如下

      

    2、activity_main布局,Androidv4包里自带的,既然是自带的那么直接拿来用就可以了,当然前提是你得工程里有v4包

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context="com.example.test02.MainActivity" >
        
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:background="@android:color/holo_orange_dark"
            android:orientation="horizontal" >
    
            <TextView
                android:id="@+id/tv1"
                android:layout_width="wrap_content"
                android:layout_height="30dp"
                android:layout_weight="1"
                android:gravity="center"
                android:text="链接1"
                android:textColor="@android:color/white"
                android:textSize="18sp" />
    
            <TextView
                android:id="@+id/tv2"
                android:layout_width="wrap_content"
                android:layout_height="30dp"
                android:layout_weight="1"
                android:gravity="center"
                android:text="链接2"
                android:textColor="@android:color/secondary_text_dark"
                android:textSize="18sp" />
    
            <TextView
                android:id="@+id/tv3"
                android:layout_width="wrap_content"
                android:layout_height="30dp"
                android:layout_weight="1"
                android:gravity="center"
                android:text="链接3"
                android:textColor="@android:color/secondary_text_dark"
                android:textSize="18sp" />
        </LinearLayout>
    
       
    
        <android.support.v4.view.ViewPager
            android:id="@+id/vp"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:flipInterval="30"
            android:persistentDrawingCache="animation" />
    
    </LinearLayout>

    fragment1_layout布局,fragment2_layout,fragment3_layout布局一样,只是背景颜色不同

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent" 
        android:background="@android:color/holo_blue_bright"
        >
    
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="50sp"
            android:text="page1" />
    
       
     
    </RelativeLayout>

    3、辅助类、MyFragmentPagerAdapter

    package com.example.test02;
    
    import java.util.List;
    
    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentManager;
    import android.support.v4.app.FragmentPagerAdapter;
    
    
    
    public class MyFragmentPagerAdapter extends FragmentPagerAdapter {
    
        private FragmentManager fragmentManager;
        private List<Fragment> fragmentList;
        
        
        public MyFragmentPagerAdapter(FragmentManager fragmentManager,List<Fragment> fragmentList) {
            super(fragmentManager);
            this.fragmentManager = fragmentManager;
            this.fragmentList = fragmentList;
        }
    
        @Override
        public Fragment getItem(int arg0) {
            // TODO Auto-generated method stub
            return fragmentList.get(arg0);
        }
    
        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return fragmentList.size();
        }
    
    }

     fragment1_layout类,fragment2_layout类、fragment3_layout类差不多,只是调用布局不同

    package com.example.test02;
    
    
    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    
    public class Fragment1 extends Fragment{
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
          //调用布局 View view
    = inflater.inflate(R.layout.fragment1_layout, container,false); return view; } }

    MainActivity类

    package com.example.test02;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import android.graphics.BitmapFactory;
    import android.graphics.Matrix;
    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentActivity;
    import android.support.v4.app.FragmentManager;
    import android.support.v4.view.ViewPager;
    import android.support.v4.view.ViewPager.OnPageChangeListener;
    import android.util.DisplayMetrics;
    import android.util.Log;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.animation.Animation;
    import android.view.animation.TranslateAnimation;
    import android.widget.ImageView;
    import android.widget.TextView;
    import android.widget.Toast;
    
    public class MainActivity extends FragmentActivity {
    
        private ViewPager viewPager;
        private List<Fragment> fragmentList;
        private TextView view1, view2, view3;
        private ImageView iv;
        private int currIndex;// 当前页卡编号
        private int bmpW;// 横线图片宽度
        private int offset;// 图片移动的偏移量
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            /*
             * 初始化图片
             */
            iv = (ImageView) findViewById(R.id.cursor);
            // 获取横线图片宽度
            bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.a1)
                    .getWidth();
            // 获取屏幕分辨率
            DisplayMetrics dm = new DisplayMetrics();
            // 把屏幕尺寸信息赋值给DisplayMetrics dm,注意不是set
            getWindowManager().getDefaultDisplay().getMetrics(dm);
            // 屏幕宽度
            int screenW = dm.widthPixels;
            // 计算偏移量
            offset = (screenW / 3 - bmpW) / 2;
            // imgageview设置平移,使下划线平移到初始位置(平移一个offset)
            Matrix matrix = new Matrix();
            matrix.postTranslate(offset, 0);
            Log.i("平移", "" + offset);
            //iv.setImageMatrix(matrix);
            
            
            Animation animation_init = new TranslateAnimation(0,offset, 0, 0);// 平移动画
            animation_init.setFillAfter(true);// 动画终止时停留在最后一帧,不然会回到没有执行前的状态
            animation_init.setDuration(200);// 动画持续时间0.2秒
            iv.startAnimation(animation_init);// 是用ImageView来显示动画的
            
    
            /*
             * 初始化ViewPager
             */
            viewPager = (ViewPager) findViewById(R.id.vp);
            fragmentList = new ArrayList<Fragment>();
            // Fragment btFragment= new ButtonFragment();
            Fragment fragment1 = new Fragment1();
            Fragment fragment2 = new Fragment2();
            Fragment fragment3 = new Fragment3();
            fragmentList.add(fragment1);
            fragmentList.add(fragment2);
            fragmentList.add(fragment3);
    
            FragmentManager fragmentManager = getSupportFragmentManager();
            MyFragmentPagerAdapter pagerAdapter = new MyFragmentPagerAdapter(
                    fragmentManager, fragmentList);
            viewPager.setAdapter(pagerAdapter);
            viewPager.setCurrentItem(0);// 设置当前显示标签页为第一页
            
            viewPager.setOnPageChangeListener(new OnPageChangeListener() {
    
                private int one = offset * 2 + bmpW;// 两个相邻页面的偏移量
    
                @Override
                public void onPageSelected(int arg0) {
    
                    Animation animation = new TranslateAnimation(currIndex * one+offset,
                            arg0 * one+offset, 0, 0);// 平移动画
                    currIndex = arg0;
                    animation.setFillAfter(true);// 动画终止时停留在最后一帧,不然会回到没有执行前的状态
                    animation.setDuration(200);// 动画持续时间0.2秒
                    iv.startAnimation(animation);// 是用ImageView来显示动画的
                    int i = currIndex + 1;
                    //Toast.makeText(MainActivity.this, "您选择了第"+i+"个页卡", 100).show();  
    
                }
    
                @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
    
                }
            });
            
    
            /*
             * 初始化链接
             */
            view1 = (TextView) findViewById(R.id.tv1);
            view2 = (TextView) findViewById(R.id.tv2);
            view3 = (TextView) findViewById(R.id.tv3);
    
            view1.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    viewPager.setCurrentItem(0);
                }
            });
            view2.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    viewPager.setCurrentItem(1);
                }
            });
            view3.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    viewPager.setCurrentItem(2);
                }
            });
    
            
        }
    
    }

    效果图:

      

      页面之间可以切换

  • 相关阅读:
    Jmeter性能测试 入门
    线程模型——什么是线程池、以及怎样正确地配置线程池
    在Spring Bean的生命周期中各方法的执行顺序
    @Autowired @Qualifier
    @Autowired还可以注入List和Map
    springcloud ribbon的 @LoadBalanced注解
    CAS实现SSO 单点登录
    Docker 概念-2
    你的JavaBean是否真的需要实现Serializable
    基于django的会议室预订系统
  • 原文地址:https://www.cnblogs.com/yuluo123/p/6179899.html
Copyright © 2011-2022 走看看