[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

posted @ 2012-04-08 09:30  三加二减五  Views(2182)  Comments(0Edit  收藏  举报