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

  • 相关阅读:
    助力APP尽情“撒币”!阿里云正式上线移动直播问答解决方案
    Linux API的fork()测试
    完美搞定《DOCKER IN ACTION》第二章示例
    docker+python无头浏览器爬虫
    阿里云播放器SDK的正确打开方式 | Aliplayer Web播放器介绍及功能实现(三)
    11月9日云栖精选夜读:阿里90后工程师_如何用AI程序写出双11打call歌?
    知名网站的 404 页面长啥样?你的404长啥样?
    10月24日云栖精选夜读:2017杭州•云栖大会完美收官 虚拟化平台精彩回顾
    memcache漏洞你补上了吗
    5分钟用Jitpack发布开源库
  • 原文地址:https://www.cnblogs.com/shocker/p/2437310.html
Copyright © 2011-2022 走看看