zoukankan      html  css  js  c++  java
  • 几种tabhost的总结(3)

    activity动画切换效果

    一;布局

    <?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" >
        <com.ct.tabhost.AnimationTabHost
           android:id="@android:id/tabhost"
           android:layout_width="fill_parent"
           android:layout_height="fill_parent" 
            >
            <LinearLayout
                android:id="@+id/ll_messagehome_liner"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:orientation="vertical" >
    
                <FrameLayout
                    android:id="@android:id/tabcontent"
                    android:layout_width="fill_parent"
                    android:layout_height="0.0dp"
                    android:layout_weight="1.0"
                    android:gravity="center" />
    
                <TabWidget
                    android:id="@android:id/tabs"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:layout_weight="0.0"
                    android:visibility="gone" />
    
                <RadioGroup
                    android:id="@+id/rg_message_rgroup"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:layout_gravity="bottom"
                    android:gravity="center_vertical"
                    android:orientation="horizontal" >
    
                    <RadioButton
                        android:id="@+id/rb_message_rbutton0"
                        style="@style/messagehome_rdbtn"
                        android:drawableTop="@drawable/mes_image_bg"
                        android:tag="sent"
                        android:text="发送" />
    
                    <RadioButton
                        android:id="@+id/rb_message_rbutton1"
                        style="@style/messagehome_rdbtn"
                        android:checked="true"
                        android:drawableTop="@drawable/get_image_bg"
                        android:tag="receive"
                        android:text="收信" />
    
                    <RadioButton
                        android:id="@+id/rb_message_rbutton2"
                        style="@style/messagehome_rdbtn"
                        android:drawableTop="@drawable/dele_image_bg"
                        android:tag="rubbish"
                        android:text="垃圾箱" />
    
                    <RadioButton
                        android:id="@+id/rb_message_rbutton3"
                        style="@style/messagehome_rdbtn"
                        android:drawableTop="@drawable/write_image_bg"
                        android:tag="drafts"
                        android:text="草稿箱" />
                </RadioGroup>
            </LinearLayout>
            
            
        </com.ct.tabhost.AnimationTabHost>
        
    
    </LinearLayout>

    二:MainActivity

    package com.ct.tabhost;
    
    import android.app.TabActivity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.widget.RadioGroup;
    import android.widget.RadioGroup.OnCheckedChangeListener;
    import android.widget.TabHost;
    import android.widget.TabHost.TabSpec;
    
    public class MainActivity extends TabActivity {
        /** Called when the activity is first created. */
        public static RadioGroup group;
        AnimationTabHost tabHost;
        public static final String TAB_SENT = "sent";
        public static final String TAB_RECEIVE = "receive";
        public static final String TAB_RUBBISH = "rubbish";
        public static final String TAB_DRAFTS = "drafts";
        TabSpec tabSpec;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            initView();
            tabListener();
        }
        
        private void initView(){
            // 单选按钮组
            group = (RadioGroup) findViewById(R.id.rg_message_rgroup);
            addTabHost();
        }
        
        /**
         * 增加Tabhost内容的.
         */
        private void addTabHost() {
    
            tabHost = (AnimationTabHost) getTabHost();
    
            tabHost.addTab(tabHost.newTabSpec(TAB_SENT).setIndicator(TAB_SENT)
                    .setContent(new Intent(this, SendMessageActivity.class)));
            tabHost.addTab(tabHost.newTabSpec(TAB_RECEIVE)
                    .setIndicator(TAB_RECEIVE).setContent(
                            new Intent(this, ReceiveMessageAcitvity.class)));
            tabHost.addTab(tabHost.newTabSpec(TAB_RUBBISH)
                    .setIndicator(TAB_RUBBISH).setContent(
                            new Intent(this, RubbishMessageActivity.class)));
            tabHost.addTab(tabHost.newTabSpec(TAB_DRAFTS).setIndicator(TAB_DRAFTS)
                    .setContent(new Intent(this, DraftsBoxActivity.class)));
            tabHost.setCurrentTab(1);
            tabHost.setOpenAnimation(true);
    
        }
        
        private void tabListener(){
            // 切换监听
                    tabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() {
    
                        @Override
                        public void onTabChanged(String tabId) {
                            // TODO Auto-generated method stub
                            System.out.println(tabId + "--<tabId");
    
                        }
                    });
                    group.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    
                        @Override
                        public void onCheckedChanged(RadioGroup group, int checkedId) {
                            switch (checkedId) {
                            case R.id.rb_message_rbutton0:
                                tabHost.setCurrentTab(0);
                                // tabHost.setCurrentTabByTag(TAB_SENT);
                                break;
                            case R.id.rb_message_rbutton1:
                                tabHost.setCurrentTab(1);
                                // tabHost.setCurrentTabByTag(TAB_RECEIVE);
                                break;
                            case R.id.rb_message_rbutton2:
                                tabHost.setCurrentTab(2);
                                // tabHost.setCurrentTabByTag(TAB_RUBBISH);
                                break;
                            case R.id.rb_message_rbutton3:
                                tabHost.setCurrentTab(3);
                                // tabHost.setCurrentTabByTag(TAB_DRAFTS);
                                break;
                            default:
                                break;
                            }
                        }
                    });
                    
        }
    }

    AnimationTabHost

    package com.ct.tabhost;
    
    import android.content.Context;
    import android.util.AttributeSet;
    import android.view.animation.Animation;
    import android.view.animation.AnimationUtils;
    import android.widget.TabHost;
    
    public class AnimationTabHost extends TabHost{
    
        private Animation slideLeftIn;// 从屏幕左边进来
        private Animation slideLeftOut;// 从屏幕左边出去
        private Animation slideRightIn;// 从屏幕右边进来
        private Animation slideRightOut;// 从屏幕右边出去
        /** 记录是否打开动画效果 */
        private boolean isOpenAnimation;
        /** 记录当前标签页的总数 */
        private int mTabCount;
        
        public AnimationTabHost(Context context, AttributeSet attrs) {
            super(context, attrs);
            // TODO Auto-generated constructor stub
            slideLeftIn = AnimationUtils.loadAnimation(context,
                    R.anim.slide_left_in);
            slideLeftOut = AnimationUtils.loadAnimation(context,
                    R.anim.slide_left_out);
            slideRightIn = AnimationUtils.loadAnimation(context,
                    R.anim.slide_right_in);
            slideRightOut = AnimationUtils.loadAnimation(context,
                    R.anim.slide_right_out);
            isOpenAnimation = false;// 动画默认关闭
        }
        /**
         * 设置是否打开动画效果
         * 
         * @param isOpenAnimation
         *            true:打开
         */
        public void setOpenAnimation(boolean isOpenAnimation) {
            this.isOpenAnimation = isOpenAnimation;
        }
    
        /**
         * 返回当前标签页的总数
         */
    
        public int getTabCount() {
            return mTabCount;
        }
    
        @Override
        public void addTab(TabSpec tabSpec) {
            mTabCount++;
            super.addTab(tabSpec);
        }
        
        @Override
        public void setCurrentTab(int index) {
            // TODO Auto-generated method stub
            int mCurrentTabID = getCurrentTab();
            if (null != getCurrentView()) {
                // 第一次设置 Tab 时,该值为 null。
                if (isOpenAnimation) {
                    // 离开的页面
                    // 切换到右边的界面,从左边离开
                    if (index > mCurrentTabID) {
                        getCurrentView().startAnimation(slideLeftOut);
                    }
                    // 切换到左边的界面,从右边离开
                    else if (index < mCurrentTabID) {
                        getCurrentView().startAnimation(slideRightOut);
                    }
                }
            }
            super.setCurrentTab(index);
            
            if (isOpenAnimation) {
                // 当前页进来是动画
                // 切换到右边的界面,从右边进来
                if (index > mCurrentTabID) {
                    getCurrentView().startAnimation(slideRightIn);
                }
                // 切换到左边的界面,从左边进来
                else if (index < mCurrentTabID) {
                    getCurrentView().startAnimation(slideLeftIn);
                }
            }
        }
        
        
        
    
    }

    几种动画

    1、slide_left_in

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
    
        <translate
            android:duration="800"
            android:fromXDelta="-100%p"
            android:toXDelta="0" />
    
        <alpha
            android:duration="800"
            android:fromAlpha="1.0"
            android:toAlpha="1.0" />
    
    </set>

    2、slide_left_out

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android" >
    
        <translate
            android:duration="800"
            android:fromXDelta="0"
            android:toXDelta="-100%p" />
    
        <alpha
            android:duration="800"
            android:fromAlpha="1.0"
            android:toAlpha="1.0" />
    
    </set>

    3、slide_right_in

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:shareInterpolator="true" >
    
        <translate
            android:duration="800"
            android:fromXDelta="100%p"
            android:toXDelta="0" />
    
        <alpha
            android:duration="800"
            android:fromAlpha="1.0"
            android:toAlpha="1.0" />
    
    </set>

    4、slide_right_out

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android" >
    
        <translate
            android:duration="800"
            android:fromXDelta="0"
            android:toXDelta="100%p" />
    
        <alpha
            android:duration="800"
            android:fromAlpha="1.0"
            android:toAlpha="1.0" />
    
    </set>

     (在F:\java\MyTabHost3)

  • 相关阅读:
    python访问mysql和redis
    南昌PHP程序员的工资水平据说可达到8000了
    Android开发总是难以入门
    AppCan可以视为Rexsee的存活版
    像我这样的人搞程序开发
    PHPWind 8.7中插件金币竞价插件的漏洞
    混合式APP开发中中间件方案Rexsee
    看到一份名单发现很多公司都和自己发生了或多或少的联系
    PhpWind 8.7中禁止后台管理员随意修改会员用户名功能
    个人前途
  • 原文地址:https://www.cnblogs.com/ct732003684/p/2849546.html
Copyright © 2011-2022 走看看