效果是点击按钮,背景滑动到点击的按钮下面.
载入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