1.自定義View
雖然Android提供了很多繼承了View類的UI組件汉操,但是在實際開發(fā)時愁铺,還會出現(xiàn)不足以滿足程序需要的情況鹰霍。這時用戶就可以通過繼承View類來開發(fā)自己的組件。開發(fā)自定義View組件的主要步驟如下:
(1)創(chuàng)建一個繼承android.view.View類的View類茵乱,并且重寫構造方法茂洒。
(2)根據(jù)需要重寫相應的方法。
在代碼中右擊瓶竭,彈出的快捷菜單中選擇“代碼/覆蓋/實現(xiàn)方法”選項督勺,將打開一個可以選擇要覆蓋或者要實現(xiàn)的方法的對話框,在該對話框中顯示了可以唄重寫的方法斤贰。只需要選中“被重寫的方法”的選框智哀,并單擊“確定”按鈕,Eclipse將自動重寫指定的方法荧恍。一般情況下瓷叫,不需要重寫全部方法。
(3)在項目的活動中,創(chuàng)建并實例化自定義View類赞辩,并將其添加到布局管理器中雌芽。
2.經(jīng)典案例
下面為大家通過一個實例來演示怎樣開發(fā)自定義View類。
【例】自定義View組件實現(xiàn)跟隨手指動的貓辨嗽。
(1)在Eclipse中創(chuàng)建Android應用項目世落,命名為cat_View。
(2)打開res\layout目錄下的main.xml布局文件糟需,其代碼修改為:
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:background = "@drawable/bj"
android:id = "@+id/mylayout">
(3)創(chuàng)建一個名為?CatView的java類屉佳,該類繼承android.view.View類,重寫帶一個參數(shù)Context的構造方法和onDraw()方法洲押。其中武花,在構造方法中設置小貓咪的默認顯示位置,在onDraw()方法中根據(jù)圖片回執(zhí)小貓咪杈帐,其代碼為:
public class CatView extends View {
public float bitmapX;//小貓咪顯示位置的X坐標
public float bitmapY体箕;//小貓咪顯示位置的Y坐標
public CatView(Context context) {
super(context);
bitmapX = 750;//默認小貓咪的顯示位置的X軸
bitmapY = 500;//默認小貓咪的顯示位置的Y坐標
}
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint();//創(chuàng)建并實例化paint的對象
Bitmap bitmap = BitmapFactory.decodeResource(this.getResource(),R.drawable.cat);//根據(jù)圖片生成位圖對象
canvas.drawBitmap(bitmap,bitmapX,bitmapY,paint);//繪制小貓咪
if (bitmap.isRecycled()){//判斷圖片是否回收
bitmap.recycled();//強制回收圖片
}
}
}
(4)打開主活動文件MainActivity,它的onCreate()方法中挑童,首先獲取幀布局管理器并實例化小貓咪對象cat累铅。接著為cat添加觸摸事件監(jiān)聽器,在重寫的觸摸事件中設置cat的顯示位置并重繪cat組件站叼,最后將cat添加到幀布局管理器中娃兽,其代碼為:
public class MainActivity extends Activity {
//第一次調(diào)用Activity
public void onCreate(Bundle saveInstanceState) {
super.onCreate(saveInstanceState);
setContentView(R.layout.main);
//獲取幀布局管理器
Framelayout framelayout = (FrameLayout)findViewById(R.id.mylayout);
//創(chuàng)建并實例化CatView類
final CatView cat = new CatView (MainActivity.this);
//為小貓咪添加觸摸事件監(jiān)聽
cat.setOnTouchListener(new OnTouchListener(){
public boolean onTouch(View v,MotionEvent event){
cat.bitmapX = event.getX();//小貓咪顯示位置的X坐標
cat.bitmapY = event.getY();//小貓咪顯示位置的Y坐標
cat.invalidate();//重繪 cat 組件
return true;
}
})尽楔;
frameLayout.addView(cat);//將cat添加到布局管理器中
}
運行程序投储,當用鼠標在屏幕上拖拽時,小貓咪將跟著鼠標的拖拽軌跡移動阔馋。
歡迎所有的朋友加QQ群:364595326玛荞,一起交流和學習