国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android開發基于Drawable實現圓角矩形的方法

2019-10-22 18:25:16
字體:
來源:轉載
供稿:網友

本文實例講述了Android開發基于Drawable實現圓角矩形的方法。分享給大家供大家參考,具體如下:

第一步:寫個類繼承drawable,重寫里面的方法,實現的核心代碼在draw里

關鍵技術:BitmapShader

public BitmapShader(Bitmap bitmap,Shader.TileMode tileX,Shader.TileMode tileY)

調用這個方法來產生一個畫有一個位圖的渲染器(Shader)。

bitmap 在渲染器內使用的位圖
tileX The tiling mode for x to draw the bitmap in. 在位圖上X方向渲染器平鋪模式
tileY The tiling mode for y to draw the bitmap in. 在位圖上Y方向渲染器平鋪模式

TileMode
CLAMP :如果渲染器超出原始邊界范圍,會復制范圍內邊緣染色。
REPEAT :橫向和縱向的重復渲染器圖片,平鋪。
MIRROR :橫向和縱向的重復渲染器圖片,這個和REPEAT重復方式不一樣,他是以鏡像方式平鋪。

/*** 四種屏幕尺寸分類:: small, normal, large, and xlarge* 四種密度分類: ldpi (low), mdpi (medium), hdpi (high), and xhdpi (extra high)* 四種屏幕的DPI:ldpi是120dpi,mdpi是160dpi,hdpi是240dpi,xhdpi是320dpi* 四種屏幕對應density:0.75,1,1.5,2* 四種圖片資源文件夾:drawable-ldpi,drawable-mdpi,drawable-hdpi,drawable-xhdpi*//** * 圓角 * * @Project App_View * @Package com.android.view.drawable * @author chenlin * @version 1.0 * @Note TODO */public class RoundImageDrawable extends Drawable { private Paint mPaint; private Bitmap mBitmap; private RectF mRectF; private int mRound; public RoundImageDrawable(Bitmap bitmap) {  this.mBitmap = bitmap;  mPaint = new Paint();  mPaint.setAntiAlias(true);  BitmapShader shader = new BitmapShader(mBitmap, TileMode.CLAMP, TileMode.CLAMP);  mPaint.setShader(shader); } /**  * 初始化區域  */ @Override public void setBounds(int left, int top, int right, int bottom) {  mRectF = new RectF(left, top, right, bottom);  super.setBounds(left, top, right, bottom); } /**  * 核心代碼: 繪制圓角  */ @Override public void draw(Canvas canvas) {  canvas.drawRoundRect(mRectF, mRound, mRound, mPaint); } /**  * 暴露給外面設置圓角的大小  *  * @param round  */ public void setRound(int round) {  this.mRound = round; } /**  * getIntrinsicWidth、getIntrinsicHeight主要是為了在View使用wrap_content的時候,  * 提供一下尺寸,默認為-1可不是我們希望的  */ @Override public int getIntrinsicHeight() {  return mBitmap.getHeight(); } @Override public int getIntrinsicWidth() {  return mBitmap.getWidth(); } /**  * 根據畫筆設定drawable的透明度  */ @Override public void setAlpha(int alpha) {  mPaint.setAlpha(alpha); } /**  * 根據畫筆設定drawable的顏色過濾器  */ @Override public void setColorFilter(ColorFilter cf) {  mPaint.setColorFilter(cf); } @Override public int getOpacity() {  return PixelFormat.TRANSLUCENT; }}

第二步:實現類

public class RoundActivity extends Activity { private ImageView mImageView; @Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_round_drawable);  setContentView(R.layout.activity_round_drawable);  mImageView = (ImageView) findViewById(R.id.iv_round);  Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.aa);  RoundImageDrawable drawable = new RoundImageDrawable(bitmap);  drawable.setRound(30);  mImageView.setImageDrawable(drawable); }}

activity_round_drawable.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ImageView  android:id="@+id/iv_round"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:scaleType="fitXY" /></LinearLayout>

繪制圓形圖片

核心代碼:

mWidth = Math.min(bitmap.getWidth(), bitmap.getHeight());canvas.drawCircle(mWidth / 2, mWidth / 2, mRadius, mPaint);
/** * 圓形 * @Project  App_View * @Package  com.android.view.drawable * @author   chenlin * @version  1.0 * @Note    TODO */public class CircleImageDrawable extends Drawable {  private Bitmap mBitmap;  private Paint mPaint;  private int mWidth;  private int mRadius;  public CircleImageDrawable(Bitmap bitmap){    this.mBitmap = bitmap;    mPaint.setAntiAlias(true);    BitmapShader shader = new BitmapShader(mBitmap, TileMode.CLAMP, TileMode.CLAMP);    mPaint.setShader(shader);    mWidth = Math.min(bitmap.getWidth(), bitmap.getHeight());    mRadius = mWidth / 2;  }  /**   * 核心代碼   */  @Override  public void draw(Canvas canvas) {    canvas.drawCircle(mWidth / 2, mWidth / 2, mRadius, mPaint);  }  /**   * getIntrinsicWidth、getIntrinsicHeight主要是為了在View使用wrap_content的時候,   * 提供一下尺寸,默認為-1可不是我們希望的   */  @Override  public int getIntrinsicHeight() {    return mWidth;  }  @Override  public int getIntrinsicWidth() {    return mWidth;  }  @Override  public void setAlpha(int alpha) {    mPaint.setAlpha(alpha);  }  @Override  public void setColorFilter(ColorFilter cf) {    mPaint.setColorFilter(cf);  }  @Override  public int getOpacity() {    return PixelFormat.TRANSLUCENT;  }}

希望本文所述對大家Android程序設計有所幫助。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 靖边县| 海盐县| 大冶市| 利津县| 从江县| 淳化县| 黄石市| 寿阳县| 海阳市| 全州县| 山阳县| 香格里拉县| 固始县| 板桥市| 临夏县| 勐海县| 阳江市| 兴山县| 彰武县| 陕西省| 宽甸| 日喀则市| 寿光市| 乐亭县| 洛浦县| 凤阳县| 定结县| 泽库县| 芜湖县| 庆云县| 衡山县| 双峰县| 平舆县| 师宗县| 新安县| 昌图县| 宾阳县| 区。| 饶河县| 湘乡市| 六盘水市|