<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ### 6.3 自定義Drawable Drawable的使用范圍很單一,一個是作為ImageView中的圖像來顯示,另外一個就是作為View的背景,大多數情況下Drawable都是以View的背景這種形式出現的。Drawable的工作原理很簡單,其核心就是draw方法。在第5章中,我們分析了View的工作原理,我們知道系統會調用Drawable的draw方法來繪制View的背景,從這一點我們明白,可以通過重寫Drawable的draw方法來自定義Drawable。 通常我們沒有必要去自定義Drawable,這是因為自定義的Drawable無法在XML中使用,這就降低了自定義Drawable的使用范圍。某些特殊情況下我們的確想自定義Drawable,這也是可以的。下面演示一個自定義Drawable的實現過程,我們通過自定義Drawable來繪制一個圓形的Drawable,并且它的半徑會隨著View的變化而變化,這種Drawable可以作為View的通用背景,代碼如下所示。 public class CustomDrawable extends Drawable { private Paint mPaint; public CustomDrawable(int color) { mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setColor(color); } @Override public void draw(Canvas canvas) { final Rect r = getBounds(); float cx = r.exactCenterX(); float cy = r.exactCenterY(); canvas.drawCircle(cx, cy, Math.min(cx, cy), mPaint); } @Override public void setAlpha(int alpha) { mPaint.setAlpha(alpha); invalidateSelf(); } @Override public void setColorFilter(ColorFilter cf) { mPaint.setColorFilter(cf); invalidateSelf(); } @Override public int getOpacity() { // not sure, so be safe return PixelFormat.TRANSLUCENT; } } 在上面的代碼中,draw、setAlpha、setColorFilter和getOpacity這幾個方法都是必須要實現的,其中draw是最主要的方法,這個方法就和View的draw方法類似,而setAlpha、setColorFilter和getOpacity這三個方法的實現都比較簡單,這里不再多說了。在上面的例子中,參考了ShapeDrawable和BitmapDrawable的源碼,所以說,源碼是一個很好的學習資料,有些技術細節我們不清楚,就可以查看源碼中類似功能的實現以及相應的文檔,這樣就可以更有針對性地解決一些問題。 上面的例子比較簡單,但是流程是完整的,讀者可以根據自己的需要實現更復雜的自定義Drawable。另外getIntrinsicWidth和getIntrinsicHeight這兩個方法需要注意一下,當自定義的Drawable有固有大小時最好重寫這兩個方法,因為它會影響到View的wrap_content布局,比如自定義Drawable是繪制一張圖片,那么這個Drawable的內部大小就可以選用圖片的大小。在上面的例子中,自定義的Drawable是由顏色填充的圓形并且沒有固定的大小,因此沒有重寫這兩個方法,這個時候它的內部大小為-1,即內部寬度和內部高度都為-1。需要注意的是,內部大小不等于Drawable的實際區域大小,Drawable的實際區域大小可以通過它的getBounds方法來得到,一般來說它和View的尺寸相同。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看