Android編程自定義組件實(shí)例詳解
本文實(shí)例講述了Android編程自定義組件。分享給大家供大家參考,具體如下:
在Android中,所有的UI界面都是由View類和ViewGroup類及其子類組合而成。其中,View類是所有UI組件的基類,而ViewGroup類是容納這些UI組件的容器。
其本身也是View類的子類。
在實(shí)際開發(fā)中,View類還不足以滿足程序所有的需求。這時(shí),便可以通過繼承View類來開發(fā)自己的組件。
開發(fā)自定義組件的步驟:
1、創(chuàng)建一個(gè)繼承android.view.View類的View類,并且重寫構(gòu)造方法。
2、根據(jù)需要重寫相應(yīng)的方法。
3、創(chuàng)建并實(shí)例化自定義View類,并將其添加到布局管理器中。
現(xiàn)在來學(xué)習(xí)使用自定義類
1、首先創(chuàng)建一個(gè)java文件來繪制圖片
package myview; import com.example.allcode.R; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; import android.view.View; public class MyView extends View{ public float bitmipx; public float bitmipy; public MyView(Context context) { super(context); bitmipx=550; bitmipy=550; // TODO Auto-generated constructor stub } @Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub super.onDraw(canvas); //創(chuàng)建并實(shí)例化Paint對象 Paint paint = new Paint(); //根據(jù)圖片生成位圖對象 Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.image_equip_baibao_baicaodan); canvas.drawBitmap(bitmap, bitmipx,bitmipy, paint); //繪制圖片 if(bitmap.isRecycled()) //判斷圖片是否可以回收 { bitmap.recycle(); //強(qiáng)制回收圖片 } } }
2、在主activity中實(shí)例化圖片,并添加觸摸事件
package myview; import com.example.allcode.R; import android.app.Activity; import android.os.Bundle; import android.provider.ContactsContract.CommonDataKinds.Event; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.widget.FrameLayout; public class ShowMyView extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.showmyview); FrameLayout framelayout = (FrameLayout) findViewById(R.id.showview); final MyView myview = new MyView(ShowMyView.this); //創(chuàng)建并示例化MyView類 //添加觸摸事件 myview.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub myview.bitmipx=event.getX(); myview.bitmipy=event.getY(); myview.invalidate();//重繪自定義組件 return true; } }); framelayout.addView(myview); } }
對應(yīng)的布局文件
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/showview" //不要忘記這一行 > </FrameLayout>
效果圖如下:
更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android開發(fā)入門與進(jìn)階教程》、《Android調(diào)試技巧與常見問題解決方法匯總》、《Android基本組件用法總結(jié)》、《Android視圖View技巧總結(jié)》、《Android布局layout技巧總結(jié)》及《Android控件用法總結(jié)》
希望本文所述對大家Android程序設(shè)計(jì)有所幫助。
- Android自定義組件獲取本地圖片和相機(jī)拍照圖片
- Android 自定義組件成JAR包的實(shí)現(xiàn)方法
- Android自定義組件ListPopWindow
- android自定義組件實(shí)現(xiàn)方法
- Android實(shí)現(xiàn)Ant Design 自定義表單組件
- Android自定義加載loading view動(dòng)畫組件
- Android UI設(shè)計(jì)系列之自定義DrawView組件實(shí)現(xiàn)數(shù)字簽名效果(5)
- Android中自定義Checkbox組件實(shí)例
- Android自定義View設(shè)定到FrameLayout布局中實(shí)現(xiàn)多組件顯示的方法 分享
相關(guān)文章
Android手機(jī)內(nèi)存中文件的讀寫方法小結(jié)
這篇文章主要介紹了Android手機(jī)內(nèi)存中文件的讀寫方法,實(shí)例總結(jié)了Android針對文件讀寫操作的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04Android ExpandableListView使用方法案例詳解
這篇文章主要介紹了Android ExpandableListView使用方法案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08Android UI實(shí)現(xiàn)單行文本水平觸摸滑動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了Android UI實(shí)現(xiàn)單行文本水平觸摸滑動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10Android 7.0調(diào)用相機(jī)崩潰詳解及解決辦法
這篇文章主要介紹了 Android 7.0調(diào)用相機(jī)崩潰詳解及解決辦法的相關(guān)資料,需要的朋友可以參考下2016-12-12android listview優(yōu)化幾種寫法詳細(xì)介紹
這篇文章只是總結(jié)下getView里面優(yōu)化視圖的幾種寫法,需要的朋友可以參考下2012-11-11Android 使用 ViewPager循環(huán)廣告位的實(shí)現(xiàn)
本文給大家分享android使用 ViewPager循環(huán)廣告位的實(shí)現(xiàn),感興趣的朋友一起學(xué)習(xí)吧2015-11-11Android 5.0最應(yīng)該實(shí)現(xiàn)的8個(gè)期望
毫無疑問,Android 5 將是令人興奮的操作系統(tǒng),因?yàn)?Android4.0 至 4.4 版本之間并沒有顯著的差異,顯然谷歌會(huì)在 5.0 版本中進(jìn)行一些較大幅度的革新2016-01-01