这个是不带动画效果,要动画效果的看后面的文章。
public class TabSwitcher extends LinearLayout{ private static final String tag="TabSwitcher"; private Context context; private String[] texts; private int arrayId; private int selectedPosition=0; private int oldPosition=selectedPosition; private int[] background={R.drawable.tabswitcher_short,Color.TRANSPARENT}; private TextView[] tvs; public TabSwitcher(Context context) { super(context); // TODO Auto-generated constructor stub init(); } public TabSwitcher(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub Log.i(tag, "--------------TabSwitcher2---------------------"); init(); TypedArray a=context.obtainStyledAttributes(attrs,R.styleable.custom); arrayId=a.getResourceId(R.styleable.custom_arrayId, 0); selectedPosition=a.getInt(R.styleable.custom_selectedPosition, 0); a.recycle(); } private void init(){ context=getContext(); setOrientation(HORIZONTAL); LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT); setLayoutParams(params); // texts=new String[]{"游戏","应用","娱乐"}; setBackgroundResource(R.drawable.tabswitcher_long); } @Override protected void onFinishInflate() { // TODO Auto-generated method stub super.onFinishInflate(); Log.i(tag, "--------------onFinishInflate---------------------"); if(arrayId!=0){ texts=getResources().getStringArray(arrayId); }else{ texts=new String[]{}; } tvs=new TextView[texts.length]; LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT); params.weight=1; params.gravity=Gravity.CENTER_VERTICAL; for(int i=0;i<texts.length;i++){ TextView child=new TextView(context); child.setTag(i); // child.setText(texts[i]); child.setTextSize(16); child.setTextColor(Color.BLACK); child.setGravity(Gravity.CENTER); tvs[i]=child; child.setOnClickListener(listener); this.addView(child, params); } } OnClickListener listener = new OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub selectedPosition=(Integer)v.getTag(); if(selectedPosition!=oldPosition){ tvs[oldPosition].setBackgroundColor(background[1]); oldPosition=selectedPosition; ((TextView)v).setBackgroundResource(background[0]); if(onItemClickLisener!=null){ onItemClickLisener.onItemClickLisener(v, selectedPosition); } } } }; @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { // TODO Auto-generated method stub super.onSizeChanged(w, h, oldw, oldh); Log.i("tag", "---------------onSizeChanged--------------------"); if(selectedPosition>texts.length-1){ throw new IllegalArgumentException("The selectedPosition can't be > texts.length."); } oldPosition=selectedPosition; for(int i=0;i<texts.length;i++){ tvs[i].setText(texts[i]); if(selectedPosition==i){ tvs[i].setBackgroundResource(background[0]); }else{ tvs[i].setBackgroundColor(background[1]); } } } private OnItemClickLisener onItemClickLisener; public void setOnItemClickLisener(OnItemClickLisener onItemClickLisener) { this.onItemClickLisener = onItemClickLisener; } public interface OnItemClickLisener{ void onItemClickLisener(View view,int position); } public void setTexts(String[] texts) { this.texts = texts; } public void setSelectedPosition(int selectedPosition) { this.selectedPosition = selectedPosition; } }
用法:
import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.View; import android.widget.Toast; import com.yiyou.ui.view.TabSwitcher; import com.yiyou.ui.view.TabSwitcher.OnItemClickLisener; public class MainActivity extends Activity{ private Context context; private TabSwitcher tabSwitcher; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); context=this; tabSwitcher=(TabSwitcher)findViewById(R.id.tabSwitcher); tabSwitcher.setOnItemClickLisener(onItemClickLisener); // tabSwitcher.setTexts(new String[]{"1","2","3"}); //tabSwitcher.setSelectedPosition(1); } OnItemClickLisener onItemClickLisener=new OnItemClickLisener(){ @Override public void onItemClickLisener(View view, int position) { // TODO Auto-generated method stub // switch (position) { case 0: case 1: case 2: Toast.makeText(context, "position clicked:"+position, Toast.LENGTH_SHORT).show(); break; default: break; } } }; }
attrs.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="custom"> <attr name="arrayId" format="reference" /> <attr name="selectedPosition" format="integer" /> </declare-styleable> </resources>
小屏幕的使用下面这张图片代替工程中的图片,否则图片会切掉!