日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Android-6步教你自定義View

如果你打算完全定制一個View,那么你需要實現(xiàn)View類(所有的Android View都實現(xiàn)于這個類),并且實現(xiàn)確定尺寸的onMeasure(…))方法和確認(rèn)繪圖的onDraw(…))方法。

東寧網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)自2013年起到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。

自定義View一共分為6步

***步

 
 
 
 
  1. public class SmileyView extends View { 
  2.     private Paint mCirclePaint; 
  3.     private Paint mEyeAndMouthPaint; 
  4.  
  5.     private float mCenterX; 
  6.     private float mCenterY; 
  7.     private float mRadius; 
  8.     private RectF mArcBounds = new RectF(); 
  9.  
  10.     public SmileyView(Context context) { 
  11.         this(context, null); 
  12.     } 
  13.  
  14.     public SmileyView(Context context, AttributeSet attrs) { 
  15.         this(context, attrs, 0); 
  16.     } 
  17.  
  18.     public SmileyView(Context context, AttributeSet attrs, int defStyleAttr) { 
  19.         super(context, attrs, defStyleAttr); 
  20.         initPaints(); 
  21.     } 
  22.  
  23.     private void initPaints() {/* ... */} 
  24.  
  25.     @Override 
  26.     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {/* ... */} 
  27.  
  28.     @Override 
  29.     protected void onDraw(Canvas canvas) {/* ... */} 
  30. }  

2.實現(xiàn)畫筆paint類

本文一共兩只畫筆

 
 
 
 
  1. private void initPaints() { 
  2.     mCirclePaint = new Paint(Paint.ANTI_ALIAS_FLAG); 
  3.     mCirclePaint.setStyle(Paint.Style.FILL); 
  4.     mCirclePaint.setColor(Color.YELLOW); 
  5.     mEyeAndMouthPaint = new Paint(Paint.ANTI_ALIAS_FLAG); 
  6.     mEyeAndMouthPaint.setStyle(Paint.Style.STROKE); 
  7.     mEyeAndMouthPaint.setStrokeWidth(16 * getResources().getDisplayMetrics().density); 
  8.     mEyeAndMouthPaint.setStrokeCap(Paint.Cap.ROUND); 
  9.     mEyeAndMouthPaint.setColor(Color.BLACK); 
  10. }  

3.覆寫onMeasure(…)方法

實現(xiàn)這個方法告訴了母容器如何放棄自定義View,可以通過提供的measureSpecs來決定你的View的高和寬,以下是一個正方形,確認(rèn)它的寬和高是一樣的。

 
 
 
 
  1. @Override 
  2. protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
  3.     int w = MeasureSpec.getSize(widthMeasureSpec); 
  4.     int h = MeasureSpec.getSize(heightMeasureSpec); 
  5.  
  6.     int size = Math.min(w, h); 
  7.     setMeasuredDimension(size, size); 
  8. }  

注意:

這個方法需要至少保證一個setMeasuredDimension(..)調(diào)用,否則會報IllegalStateException錯誤。

4.實現(xiàn)onSizeChanged(…)方法

這個方法是你獲取View現(xiàn)在的寬和高. 這里我們計算的是中心和半徑。

 
 
 
 
  1. @Override 
  2. protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
  3.     mCenterX = w / 2f; 
  4.     mCenterY = h / 2f; 
  5.     mRadius = Math.min(w, h) / 2f; 
  6. }  

5.實現(xiàn)onDraw(…)方法

這個方法提供了如何繪制view,它提供的Canvas類可以進(jìn)行繪制。

 
 
 
 
  1. @Override 
  2. protected void onDraw(Canvas canvas) { 
  3.     // draw face 
  4.     canvas.drawCircle(mCenterX, mCenterY, mRadius, mCirclePaint); 
  5.     // draw eyes 
  6.     float eyeRadius = mRadius / 5f; 
  7.     float eyeOffsetX = mRadius / 3f; 
  8.     float eyeOffsetY = mRadius / 3f; 
  9.     canvas.drawCircle(mCenterX - eyeOffsetX, mCenterY - eyeOffsetY, eyeRadius, mEyeAndMouthPaint); 
  10.     canvas.drawCircle(mCenterX + eyeOffsetX, mCenterY - eyeOffsetY, eyeRadius, mEyeAndMouthPaint); 
  11.     // draw mouth 
  12.     float mouthInset = mRadius /3f; 
  13.     mArcBounds.set(mouthInset, mouthInset, mRadius * 2 - mouthInset, mRadius * 2 - mouthInset); 
  14.     canvas.drawArc(mArcBounds, 45f, 90f, false, mEyeAndMouthPaint); 
  15. }  

6.添加你的View

 
 
 
 
  1.     xmlns:android="http://schemas.android.com/apk/res/android" 
  2.     android:layout_width="match_parent" 
  3.     android:layout_height="match_parent"> 
  4.  
  5.     
  6.         android:layout_width="match_parent" 
  7.         android:layout_height="match_parent" /> 
  8.   

到此就結(jié)束了,自定義View沒你想的那么難


新聞標(biāo)題:Android-6步教你自定義View
標(biāo)題鏈接:http://www.dlmjj.cn/article/dhccgod.html