91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android-6中怎么自定義View

發布時間:2021-06-28 16:00:33 來源:億速云 閱讀:158 作者:Leah 欄目:移動開發

Android-6中怎么自定義View,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

自定義View一共分為6步

***步

public class SmileyView extends View {     private Paint mCirclePaint;     private Paint mEyeAndMouthPaint;      private float mCenterX;     private float mCenterY;     private float mRadius;     private RectF mArcBounds = new RectF();      public SmileyView(Context context) {         this(context, null);     }      public SmileyView(Context context, AttributeSet attrs) {         this(context, attrs, 0);     }      public SmileyView(Context context, AttributeSet attrs, int defStyleAttr) {         super(context, attrs, defStyleAttr);         initPaints();     }      private void initPaints() {/* ... */}      @Override     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {/* ... */}      @Override     protected void onDraw(Canvas canvas) {/* ... */} }

2.實現畫筆paint類

本文一共兩只畫筆

private void initPaints() {     mCirclePaint = new Paint(Paint.ANTI_ALIAS_FLAG);     mCirclePaint.setStyle(Paint.Style.FILL);     mCirclePaint.setColor(Color.YELLOW);     mEyeAndMouthPaint = new Paint(Paint.ANTI_ALIAS_FLAG);     mEyeAndMouthPaint.setStyle(Paint.Style.STROKE);     mEyeAndMouthPaint.setStrokeWidth(16 * getResources().getDisplayMetrics().density);     mEyeAndMouthPaint.setStrokeCap(Paint.Cap.ROUND);     mEyeAndMouthPaint.setColor(Color.BLACK); }

3.覆寫onMeasure(…)方法

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

@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {     int w = MeasureSpec.getSize(widthMeasureSpec);     int h = MeasureSpec.getSize(heightMeasureSpec);      int size = Math.min(w, h);     setMeasuredDimension(size, size); }

注意:

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

4.實現onSizeChanged(…)方法

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

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

5.實現onDraw(…)方法

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

@Override protected void onDraw(Canvas canvas) {     // draw face     canvas.drawCircle(mCenterX, mCenterY, mRadius, mCirclePaint);     // draw eyes     float eyeRadius = mRadius / 5f;     float eyeOffsetX = mRadius / 3f;     float eyeOffsetY = mRadius / 3f;     canvas.drawCircle(mCenterX - eyeOffsetX, mCenterY - eyeOffsetY, eyeRadius, mEyeAndMouthPaint);     canvas.drawCircle(mCenterX + eyeOffsetX, mCenterY - eyeOffsetY, eyeRadius, mEyeAndMouthPaint);     // draw mouth     float mouthInset = mRadius /3f;     mArcBounds.set(mouthInset, mouthInset, mRadius * 2 - mouthInset, mRadius * 2 - mouthInset);     canvas.drawArc(mArcBounds, 45f, 90f, false, mEyeAndMouthPaint); }

6.添加你的View

<FrameLayout     xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="match_parent"     android:layout_height="match_parent">      <com.example.app.SmileyView         android:layout_width="match_parent"         android:layout_height="match_parent" /> </FrameLayout>

看完上述內容,你們掌握Android-6中怎么自定義View的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

曲沃县| 邯郸县| 晋城| 万山特区| 克拉玛依市| 铁力市| 博乐市| 英山县| 常州市| 策勒县| 平遥县| 新密市| 凤山县| 巴塘县| 轮台县| 和硕县| 天津市| 铁岭县| 合山市| 泌阳县| 天长市| 上饶县| 兴山县| 资溪县| 襄垣县| 玉龙| 天峨县| 原阳县| 盐城市| 西乌珠穆沁旗| 上栗县| 崇礼县| 揭东县| 苍南县| 太仓市| 女性| 茶陵县| 宁波市| 屯昌县| 京山县| 宣威市|