編輯:關於android開發
public class MyView extends View { private String mtext; private int msrc; public MyView(Context context) { super(context); } public MyView(Context context, AttributeSet attrs) { super(context, attrs); int resourceId = 0; int textId = attrs.getAttributeResourceValue(null, "Text",0); int srcId = attrs.getAttributeResourceValue(null, "Src", 0); mtext = context.getResources().getText(textId).toString(); msrc = srcId; } @Override protected void onDraw(Canvas canvas) { Paint paint = new Paint(); paint.setColor(Color.RED); InputStream is = getResources().openRawResource(msrc); Bitmap mBitmap = BitmapFactory.decodeStream(is); int bh = mBitmap.getHeight(); int bw = mBitmap.getWidth(); canvas.drawBitmap(mBitmap, 0,0, paint); //canvas.drawCircle(40, 90, 15, paint); canvas.drawText(mtext, bw/2, 30, paint); } }
布局文件:
屬性Text, Src在自定義View類的構造方法中讀取。
2)通過XML為View注冊屬性。與Android提供的標准屬性寫法一樣。 案例: 實現一個帶文字說明的ImageView (ImageView+TextView組合,文字說明,可在布局文件中設置位置)public class MyImageView extends LinearLayout { public MyImageView(Context context) { super(context); } public MyImageView(Context context, AttributeSet attrs) { super(context, attrs); int resourceId = -1; TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.MyImageView); ImageView iv = new ImageView(context); TextView tv = new TextView(context); int N = typedArray.getIndexCount(); for (int i = 0; i < N; i++) { int attr = typedArray.getIndex(i); switch (attr) { case R.styleable.MyImageView_Oriental: resourceId = typedArray.getInt( R.styleable.MyImageView_Oriental, 0); this.setOrientation(resourceId == 1 ? LinearLayout.HORIZONTAL : LinearLayout.VERTICAL); break; case R.styleable.MyImageView_Text: resourceId = typedArray.getResourceId( R.styleable.MyImageView_Text, 0); tv.setText(resourceId > 0 ? typedArray.getResources().getText( resourceId) : typedArray .getString(R.styleable.MyImageView_Text)); break; case R.styleable.MyImageView_Src: resourceId = typedArray.getResourceId( R.styleable.MyImageView_Src, 0); iv.setImageResource(resourceId > 0 ?resourceId:R.drawable.ic_launcher); break; } } addView(iv); addView(tv); typedArray.recycle(); } }
attrs.xml進行屬性聲明, 文件放在values目錄下
MainActivity的布局文件:先定義命名空間xmlns:uview="http://schemas.android.com/apk/res/com.example.myimageview2" (com.example.myimageview2為你 在manifest中定義的包名) 然後可以像使用系統的屬性一樣使用:uview:Oriental="Vertical"
四、控件繪制 onDraw() 五、
六:自定義View的方法
onFinishInflate() 回調方法,當應用從XML加載該組件並用它構建界面之後調用的方法 onMeasure() 檢測View組件及其子組件的大小 onLayout() 當該組件需要分配其子組件的位置、大小時 onSizeChange() 當該組件的大小被改變時 onDraw() 當組件將要繪制它的內容時 onKeyDown 當按下某個鍵盤時 onKeyUp 當松開某個鍵盤時 onTrackballEvent 當發生軌跡球事件時 onTouchEvent 當發生觸屏事件時 onWindowFocusChanged(boolean) 當該組件得到、失去焦點時 onAtrrachedToWindow() 當把該組件放入到某個窗口時 onDetachedFromWindow() 當把該組件從某個窗口上分離時觸發的方法 onWindowVisibilityChanged(int): 當包含該組件的窗口的可見性發生改變時觸發的方法Android開發學習—— Fragment,androidfragment#Fragment* 用途:在一個Activity裡切換界面,切換界面時只切換Fragment
【轉】Android Studio下加入百度地圖的使用 (一)——環境搭建,androidstudio 最近有學 生要做畢業設計,會使用到定位及地圖信息的功能,特此研究
上次講解了MediaPlayer播放網絡音頻,介紹了MediaPlayer關於網絡音頻的緩沖和進度
cocos的Director、Scence、Layer(一)---摘自於官方文檔,cocosscence基本結構圖(重要) Director: 有那些作用?