項目demo源碼:http://download.csdn.net/detail/mcdullsin/8291231java
雖然本身仍是一個學的比較多的新人,可是真心但願全部博客都附上源碼,像我這類人也能縮短學習路程。android
效果:ide
好了,首先來看一下圖片選擇器selector。佈局
btn.xml學習
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_focused="true" android:state_pressed="false" android:drawable="@drawable/btn_normal"></item> <item android:state_pressed="true" android:drawable="@drawable/btn_white"></item> <item android:state_checked="true" android:drawable="@drawable/btn_white"></item> <item android:state_focused="false" android:state_pressed="false" android:drawable="@drawable/btn_normal"></item> </selector>
使用selector的組件:this
<cn.com.karl.view.ImageBtn android:id="@+id/btn_right" android:layout_height="wrap_content" android:layout_width="wrap_content" android:background="@drawable/btn" />
將其當成靜態圖片就能夠了。spa
這個selector定義了四種狀態下的按鈕圖片背景,即:未得到焦點未點擊、得到焦點未點擊、點擊、選中。不一樣狀態下圖片背景也不一樣。使用selector最好有一個初始圖片。我這個是針對按鈕說的,有可能listview有不一樣?沒進行過下一步試驗。.net
關於selector和shape很是不錯的一篇博文:http://blog.csdn.net/tianjf0514/article/details/7492876code
2、自定義控件orm
一、 首先定義一個layout實現按鈕內部佈局:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" > <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:paddingBottom="5dip" android:layout_marginLeft="8dp" android:paddingTop="5dip" /> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginLeft="8dip" android:text="肯定" android:layout_marginRight="8dp" android:textColor="#000000" /> </LinearLayout>
二、接下來寫一個類繼承LinearLayout,導入剛剛的佈局,而且設置須要的方法(設置文字,設置圖片的方法),從而使的能在代碼中控制這個自定義控件內容的顯示。
public class ImageBtn extends LinearLayout { private ImageView imageView; private TextView textView; public ImageBtn(Context context) { super(context); // TODO Auto-generated constructor stub } public ImageBtn(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub LayoutInflater inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); inflater.inflate(R.layout.imagebtn, this); imageView=(ImageView) findViewById(R.id.imageView1); textView=(TextView)findViewById(R.id.textView1); } /** * 設置圖片資源 */ public void setImageResource(int resId) { imageView.setImageResource(resId); } /** * 設置顯示的文字 */ public void setTextViewText(String text) { textView.setText(text); } }
在上面的代碼中重要的是:
LayoutInflater inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); inflater.inflate(R.layout.imagebtn, this); imageView=(ImageView) findViewById(R.id.imageView1); textView=(TextView)findViewById(R.id.textView1);
以後再主佈局文件中引用並在activity中找到它們,添加事件。
主佈局文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" > <cn.com.karl.view.ImageBtn android:id="@+id/btn_right" android:layout_height="wrap_content" android:layout_width="wrap_content" android:background="@drawable/btn" /> <cn.com.karl.view.ImageBtn android:id="@+id/btn_error" android:layout_marginLeft="5dp" android:layout_height="wrap_content" android:layout_width="wrap_content" android:background="@drawable/btn" /> </LinearLayout>
java文件:
public class MainActivity extends Activity { private ImageBtn imageBtn1; private ImageBtn imageBtn2; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageBtn1=(ImageBtn) this.findViewById(R.id.btn_right); imageBtn2=(ImageBtn) this.findViewById(R.id.btn_error); imageBtn1.setTextViewText("肯定"); imageBtn2.setTextViewText("取消"); imageBtn1.setImageResource(R.drawable.right_icon); imageBtn2.setImageResource(R.drawable.error_icon); imageBtn1.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub Toast.makeText(getApplicationContext(), "點擊的正確按鈕", 1).show(); } }); imageBtn2.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub Toast.makeText(getApplicationContext(), "點擊的錯誤按鈕", 1).show(); } }); } }