zoukankan      html  css  js  c++  java
  • [Android]仿网易新闻标题栏下面的分类滑动菜单

    效果是点击按钮,背景滑动到点击的按钮下面.

    载入xml布局视图的代码:

    package com.swufe.btnselected;

    import android.app.Activity;
    import android.os.Bundle;
    import android.view.*;
    import android.view.View.OnClickListener;
    import android.view.animation.TranslateAnimation;
    import android.widget.*;
    /**
    *只载入布局视图继承Activity,如需载入Activity就使用ActivityGroup
    **/
    public class BtnSelectedActivity extends Activity {

    private int pageArr[] = {R.layout.page1,R.layout.page2};
    private int btnArr[] = {R.id.tab1,R.id.tab2};
    private TextView btn_0;
    private TextView btn_1;

    private LinearLayout container;
    private ImageView btnBg;

    //初始当前选项值
    private int currentID = 0;

    private int startPoint;
    private int endPoint;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    init();
    }

    private void init(){
    btn_0 = (TextView) findViewById(btnArr[0]);
    btn_0.setOnClickListener(onClickListener);
    btn_1 = (TextView) findViewById(btnArr[1]);
    btn_1.setOnClickListener(onClickListener);

    btnBg = (ImageView) findViewById(R.id.btn_bg);
    container=(LinearLayout) this.findViewById(R.id.container);

    View firstView=LayoutInflater.from(getApplicationContext()).inflate(pageArr[currentID], null);
    container.addView(firstView);
    }

    private void updateBtnBg(View v){

    //更新按钮背景的位置
    if(btnArr[currentID] != v.getId()){
    //System.out.println("不是当前选项");

    TextView currentBtn = (TextView) findViewById(btnArr[currentID]);

    startPoint = ((View)currentBtn.getParent()).getLeft() - ((View)v.getParent()).getPaddingLeft();
    endPoint = ((View)v.getParent()).getLeft() - ((View)v.getParent()).getPaddingLeft();

    //System.out.println(startPoint + " "+ endPoint + " "+((View)btnBg.getParent()).getLeft());

    TranslateAnimation animation = new TranslateAnimation(startPoint, endPoint, 0, 0);
    animation.setDuration(100);
    animation.setFillAfter(true);
    btnBg.startAnimation(animation);

    //更新当前选项
    int i=0;
    while(i<btnArr.length){
    if(btnArr[i]==v.getId()){
    currentID = i;
    }
    i++;
    }
    //更新container里面的视图
    updateContainer();
    }else{
    return;
    //System.out.println("是当前选项");
    }
    }

    private void updateContainer(){
    container.removeAllViews();
    View newView=LayoutInflater.from(getApplicationContext()).inflate(pageArr[currentID], null);
    container.addView(newView);
    }

    private OnClickListener onClickListener = new OnClickListener(){
    //分类按钮点击时执行
    @Override
    public void onClick(View v) {
    updateBtnBg(v);
    }

    };
    }

    载入Activity代码:

    package com.swufe.btnselected;
    
    import android.app.ActivityGroup;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.*;
    import android.view.View.OnClickListener;
    import android.view.ViewGroup.LayoutParams;
    import android.view.animation.TranslateAnimation;
    import android.widget.*;
    
    public class BtnSelectedActivity extends ActivityGroup {
        private Class<?> clArr[] = {FirstPage.class, SecondPage.class};
        //private int pageArr[] = {R.layout.page1,R.layout.page2};
        private int btnArr[] = {R.id.tab1,R.id.tab2};
        private TextView btn_0;
        private TextView btn_1;
        
        private LinearLayout container;
        private ImageView btnBg;
        
        //初始当前选项值
        private int currentID = 0;
        
        private int startPoint;
        private int endPoint;
        
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
            init();
        }
        
        private void init(){
            btn_0 = (TextView) findViewById(btnArr[0]);
            btn_0.setOnClickListener(onClickListener);
            btn_1 = (TextView) findViewById(btnArr[1]);
            btn_1.setOnClickListener(onClickListener);
            
            btnBg = (ImageView) findViewById(R.id.btn_bg);
            container=(LinearLayout) this.findViewById(R.id.container);
            
            updateContainer();
        }
        
        private void updateBtnBg(View v){
            
            //更新按钮背景的位置
            if(btnArr[currentID] != v.getId()){
                //System.out.println("不是当前选项");
                
                TextView currentBtn = (TextView) findViewById(btnArr[currentID]);
                
                startPoint = ((View)currentBtn.getParent()).getLeft() - ((View)v.getParent()).getPaddingLeft();
                endPoint = ((View)v.getParent()).getLeft() - ((View)v.getParent()).getPaddingLeft();
                
                //System.out.println(startPoint + "    "+ endPoint + "    "+((View)btnBg.getParent()).getLeft());            
                
                TranslateAnimation animation = new TranslateAnimation(startPoint, endPoint, 0, 0);
                animation.setDuration(100);
                animation.setFillAfter(true);
                btnBg.startAnimation(animation);
                
                //更新当前选项            
                int i=0;
                while(i<btnArr.length){
                    if(btnArr[i]==v.getId()){
                        currentID = i;
                    }
                    i++;
                }
                //更新container里面的视图
                updateContainer();            
            }else{
                return;
                //System.out.println("是当前选项");
            }        
        }
        
        private void updateContainer(){
            container.removeAllViews();
            
            Intent intent = null;
            intent = new Intent(this,clArr[currentID]);
            Window subActivity = getLocalActivityManager().startActivity("sub"+currentID,intent);
            container.addView(subActivity.getDecorView(),LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
            
            System.out.println();
        }
        
        private OnClickListener onClickListener = new OnClickListener(){
            //分类按钮点击时执行
            @Override
            public void onClick(View v) {            
                updateBtnBg(v);
            }
            
        };
    }



    论坛地址:http://www.eoeandroid.com/forum.php?mod=viewthread&tid=165122&page=1#pid1389117

  • 相关阅读:
    JeePlus:代码生成器
    JeePlus:API工具
    Java实现 洛谷 P1023 税收与补贴问题
    Java实现 洛谷 P1023 税收与补贴问题
    Java实现 洛谷 P1023 税收与补贴问题
    Java实现 洛谷 P1328 生活大爆炸版石头剪刀布
    Java实现 洛谷 P1328 生活大爆炸版石头剪刀布
    Java实现 洛谷 P1328 生活大爆炸版石头剪刀布
    Java实现 洛谷 P1328 生活大爆炸版石头剪刀布
    Java实现 洛谷 P1328 生活大爆炸版石头剪刀布
  • 原文地址:https://www.cnblogs.com/shocker/p/2437310.html
Copyright © 2011-2022 走看看