<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.2.8 ScaleDrawable ScaleDrawable對應于`<scale>`標簽,它可以根據自己的等級(level)將指定的Drawable縮放到一定比例,它的語法如下所示。 <? xml version="1.0" encoding="utf-8"? > <scale xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/drawable_resource" android:scaleGravity=["top" | "bottom" | "left" | "right" | "center_ vertical" |"fill_vertical" | "center_horizontal" | "fill_horizontal" | "center" | "fill" | "clip_vertical" | "clip_horizontal"] android:scaleHeight="percentage" android:scaleWidth="percentage" /> 在上面的屬性中,android:scaleGravity的含義等同于shape中的android:gravity,而android:scaleWidth和android:scaleHeight分別表示對指定Drawable寬和高的縮放比例,以百分比的形式表示,比如25%。 ScaleDrawable有點費解,要理解它,我們首先要明白等級對ScaleDrawable的影響。等級0表示ScaleDrawable不可見,這是默認值,要想ScaleDrawable可見,需要等級不能為0,這一點從源碼中可以得出。來看一下ScaleDrawable的draw方法,如下所示。 public void draw(Canvas canvas) { if (mScaleState.mDrawable.getLevel() ! = 0) mScaleState.mDrawable.draw(canvas); } 很顯然,由于ScaleDrawable的等級和mDrawable的等級是保持一致的,所以如果ScaleDrawable的等級為0,那么它內部的mDrawable的等級也必然為0,這時mDrawable就無法繪制出來,也就是ScaleDrawable不可見。下面再看一下ScaleDrawable的onBoundsChange方法,如下所示。 protected void onBoundsChange(Rect bounds) { final Rect r = mTmpRect; final boolean min = mScaleState.mUseIntrinsicSizeAsMin; int level = getLevel(); int w = bounds.width(); if (mScaleState.mScaleWidth > 0) { final int iw = min ? mScaleState.mDrawable.getIntrinsicWidth() : 0; w -= (int) ((w - iw) * (10000- level) * mScaleState.mScaleWidth / 10000); } int h = bounds.height(); if (mScaleState.mScaleHeight > 0) { final int ih = min ? mScaleState.mDrawable.getIntrinsicHeight() : 0; h -= (int) ((h - ih) * (10000- level) * mScaleState.mScaleHeight / 10000); } final int layoutDirection = getLayoutDirection(); Gravity.apply(mScaleState.mGravity, w, h, bounds, r, layoutDirection); if (w > 0 && h > 0) { mScaleState.mDrawable.setBounds(r.left, r.top, r.right, r.bottom); } } 在ScaleDrawable的onBoundsChange方法中,我們可以看出mDrawable的大小和等級以及縮放比例的關系,這里拿寬度來說,如下所示。 final int iw = min ? mScaleState.mDrawable.getIntrinsicWidth() : 0; w -= (int) ((w - iw) * (10000- level) * mScaleState.mScaleWidth / 10000); 由于iw一般都為0,所以上面的代碼可以簡化為:w -= (int) (w * (10000- level) *mScaleState.mScaleWidth / 10000)。由此可見,如果ScaleDrawable的級別為最大值10000,那么就沒有縮放的效果;如果ScaleDrawable的級別(level)越大,那么內部的Drawable看起來就越大;如果ScaleDrawable的XML中所定義的縮放比例越大,那么內部的Drawable看起來就越小。另外,從ScaleDrawable的內部實現來看,ScaleDrawable的作用更偏向于縮小一個特定的Drawable。在下面的例子中,可以近似地將一張圖片縮小為原大小的30%,代碼如下所示。 // res/drawable/scale_drawable.xml <? xml version="1.0" encoding="utf-8"? > <scale xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/image1" android:scaleHeight="70%" android:scaleWidth="70%" android:scaleGravity="center" /> 直接使用上面的drawable資源是不行的,還必須設置ScaleDrawable的等級為大于0且小于等于10000的值,如下所示。 View testScale = findViewById(R.id.test_scale); ScaleDrawable testScaleDrawable = (ScaleDrawable) testScale.getBackground(); testScaleDrawable.setLevel(1); 經過上面的兩步可以正確地縮放一個Drawable,如果少了設置等級這一步,由于Drawable的默認等級為0,那么ScaleDrawable將無法顯示出來。我們可以武斷地將Drawable的等級設置為大于10000的值,比如20000,雖然也能正常工作,但是不推薦這么做,這是因為系統內部約定Drawable等級的范圍為0到10000。
                  <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>

                              哎呀哎呀视频在线观看