1. 程式人生 > >Android 實現圓角ImageView

Android 實現圓角ImageView

先上效果圖:


實現方法一:

[java]  view plain  copy
  1. /** 
  2.  * 獲取圓角點陣圖的方法 
  3.  *  
  4.  * @param bitmap 
  5.  *            需要轉化成圓角的點陣圖
     
  6.  * @param pixels 
  7.  *            圓角的度數,數值越大,圓角越大 
  8.  * @return 處理後的圓角點陣圖 
  9.  */  
  10. public static Bitmap toRoundCornerImage(Bitmap bitmap, 
    int pixels) {  
  11.     Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888);  
  12.     Canvas canvas = new Canvas(output);  
  13.     final
     int color = 0xff424242;  
  14.     final Paint paint = new Paint();  
  15.     final Rect rect = new Rect(00, bitmap.getWidth(), bitmap.getHeight());  
  16.     final RectF rectF = new RectF(rect);  
  17.     final float roundPx = pixels;  
  18.     // 抗鋸齒  
  19.     paint.setAntiAlias(true);  
  20.     canvas.drawARGB(0000);  
  21.     paint.setColor(color);  
  22.     canvas.drawRoundRect(rectF, roundPx, roundPx, paint);  
  23.     paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));  
  24.     canvas.drawBitmap(bitmap, rect, rect, paint);  
  25.     return output;  
  26. }  

實現方法二:

[java]  view plain  copy
  1. package com.loopfire.meitaotao.view.roundImageView;  
  2.   
  3. import com.loopfire.meitaotao.R;  
  4.   
  5. import android.content.Context;  
  6. import android.content.res.TypedArray;  
  7. import android.graphics.Bitmap;  
  8. import android.graphics.Bitmap.Config;  
  9. import android.graphics.Canvas;  
  10. import android.graphics.Color;  
  11. import android.graphics.Paint;  
  12. import android.graphics.Path;  
  13. import android.graphics.PorterDuff;  
  14. import android.graphics.PorterDuffXfermode;  
  15. import android.graphics.RectF;  
  16. import android.util.AttributeSet;  
  17. import android.widget.ImageView;  
  18.   
  19. /** 
  20.  * 實現圓角image 
  21.  *  
  22.  * @author Administrator 
  23.  *  
  24.  */  
  25. public class RoundAngleImageView extends ImageView {  
  26.   
  27.     private Paint paint;  
  28.     /** 
  29.      * 個人理解是 
  30.      *  
  31.      * 這兩個都是畫圓的半徑 
  32.      */  
  33.     private int roundWidth = 20;  
  34.     private int roundHeight = 20;  
  35.     private Paint paint2;  
  36.   
  37.     public RoundAngleImageView(Context context, AttributeSet attrs, int defStyle) {  
  38.         super(context, attrs, defStyle);  
  39.         init(context, attrs);  
  40.     }  
  41.   
  42.     public RoundAngleImageView(Context context, AttributeSet attrs) {  
  43.         super(context, attrs);  
  44.         init(context, attrs);  
  45.     }  
  46.   
  47.     public RoundAngleImageView(Context context) {  
  48.         super(context);  
  49.         init(context, null);  
  50.     }  
  51.   
  52.     private void init(Context context, AttributeSet attrs) {  
  53.   
  54.         if (attrs != null) {  
  55.             TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.RoundAngleImageView);  
  56.             roundWidth = a.getDimensionPixelSize(R.styleable.RoundAngleImageView_roundWidth, roundWidth);  
  57.             roundHeight = a.getDimensionPixelSize(R.styleable.RoundAngleImageView_roundHeight, roundHeight);  
  58.         } else {  
  59.             float density = context.getResources().getDisplayMetrics().density;  
  60.             roundWidth = (int) (roundWidth * density);  
  61.             roundHeight = (int) (roundHeight * density);  
  62.         }  
  63.   
  64.         paint = new Paint();  
  65.         paint.setColor(Color.WHITE);  
  66.         paint.setAntiAlias(true);  
  67.         paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));  
  68.   
  69.         paint2 = new Paint();  
  70.         paint2.setXfermode(null);  
  71.     }  
  72.   
  73.     @Override  
  74.     public void draw(Canvas canvas) {  
  75.         Bitmap bitmap = Bitmap.createBitmap(getWidth(), getHeight(), Config.ARGB_8888);  
  76.         Canvas canvas2 = new Canvas(bitmap);  
  77.         super.draw(canvas2);  
  78.         drawLiftUp(canvas2);  
  79.         drawLiftDown(canvas2);  
  80.         drawRightUp(canvas2);  
  81.         drawRightDown(canvas2);  
  82.         canvas.drawBitmap(bitmap, 00, paint2);  
  83.         bitmap.recycle();  
  84.     }  
  85.   
  86.     private void drawLiftUp(Canvas canvas) {  
  87.         Path path = new Path();  
  88.         path.moveTo(0, roundHeight);  
  89.         path.lineTo(00);  
  90.         path.lineTo(roundWidth, 0);  
  91.         path.arcTo(new RectF(00, roundWidth * 2, roundHeight * 2), -90, -90);  
  92.         path.close();  
  93.         canvas.drawPath(path, paint);  
  94.     }  
  95.   
  96.     private void drawLiftDown(Canvas canvas) {  
  97.         Path path = new Path();  
  98.         path.moveTo(0, getHeight() - roundHeight);  
  99.         path.lineTo(0, getHeight());  
  100.         path.lineTo(roundWidth, getHeight());  
  101.         path.arcTo(new RectF(0, getHeight() - roundHeight * 2, roundWidth * 2, getHeight()), 9090);  
  102.         path.close();  
  103.         canvas.drawPath(path, paint);  
  104.     }  
  105. 相關推薦

    Android 實現圓角ImageView

    先上效果圖: 實現方法一: [java]  view plain  copy /**   * 獲取圓角點陣圖的方法  &

    Android 實現圓角ImageView

    先上效果圖:實現方法一:/**  * 獲取圓角點陣圖的方法  *   * @param bitmap  *            需要轉化成圓角的點陣圖  * @param pixels  *            圓角的度數,數值越大,圓角越大  * @return 處理後

    Android實現圓形Imageview,帶白色邊框

    最近做了個圓形Imageview,外面有白色邊框 有需要的同學可以看看,效果如下 附上實現程式碼 RoundImageView: public class RoundImageView

    關於Android圓角ImageView的幾種實現方式

    在實際的開發中,我們經常會遇到需要圓角ImageView的情況,但是這種ImageView官方是沒有提供的,所以需要我們去自己重寫ImageView來達到圓角的效果,但是實現這種圓角效果其實有幾種不同的實現方式,所以這一篇就對不同的實現方式進行講解,並簡單分析。 一.BitmapShader方式 首先簡

    android自定義imageview實現圓角圖片

    自定義圖片的屬性,對圖片進行圓角切割 實現效果圖: (1)在activity_main.xml檔案佈局,非常簡單 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:androi

    Android自己定義圓角ImageView

    play setfill recycle fig wid art app util clear 我們常常看到一些app中能夠顯示圓角圖片。比方qq的聯系人圖標等等,實現圓角圖片一種辦法是直接使用圓角圖片資源,當然假設沒有圓角圖片資源。我們也能夠自己通過程序實現的,以下介

    Android開發圓形ImageView實現

    radi appcompat con code roi contex draw ttr extends 1、自定義屬性,在value文件夾下新建attrs文件,聲明如下屬性 <declare-styleable name="CircleImageView">

    android RoundedBitmapDrawable最簡單方式實現圓角

    轉載自原部落格地址 demo <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xm

    Android開發--圓角按鈕和繪製直線的實現

    分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

    android shap圓角邊框實現

    在drawable資料夾下建立一個shape檔案,在佈局中要設定的控制元件下引入background此檔案就OK <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android=“http://schemas.an

    android實現按鈕圓角點選背景、字型顏色都改變

    實現圓角按鈕,點選的時候背景和字型的顏色都改變,這裡的實現效果如下:原狀態背景為白色,字型為藍色,當點選的時候背景為藍色,字型為白色。介紹兩種實現方式。1、使用button。2、實現自定義TextView。 1.使用Button首先在drawable下建一個Button

    android實現正方形的ImageView、Layout等(即高度適應寬度或者寬度適應高度)

    有時候我們希望在一個頁面中水平放置若干個正方形的ImageView,其總寬度為整個螢幕。如果我們設定每個ImageView的高度和者寬度均為若干個dp,因為不知道螢幕尺寸,就可能導致顯示不全或者有剩餘空間。可以通過以下這個方法設定ImageView其為正方形 首先,建立一個

    圓角ImageView的幾種實現方法

    ①自定義View import android.content.Context; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.grap

    在xml裡實現圓角ImageView

           在AndroidStudio裡實現圓角的ImageView有2種方法,一個是在xml檔案裡面顯示,一個是在Activity的Java檔案裡實現。這裡我用的是xml方法。我實現的效果圖如下:              程式碼如下:        在draw

    不用自定義,ImageView實現圓角的兩種方式

    不多廢話,直切主題。 方案一、利用CardView巢狀ImageView實現圓角。具體實現方式見文章《CardView的使用》 方案二、利用Glide的RequestOptions.bitmapTransform來實現,很簡單,具體如下: RoundedCorn

    android 實現半個圓角長方形

    最近專案上用到了一個需求,實現半個圓角長方形,形狀如下:沒做過,不好整啊,github上溜達一圈先...........沒有,好吧,自己動手豐衣足食。一開始的想法是,實現一個圓角長方形,然後在佈局的時候只顯示半個,但是效果不怎麼樣。後來想到實現單邊框的方法,結合圓角矩形的實現

    Android實現button一邊圓角一邊直角

    Android中要實現如下圖的效果: 這個要在真機中才能看出效果!! switch_button_left_checked.xml <?xml version="1.0" encoding=

    Android 三種方式實現圓形ImageView

    所有方式均繼承了ImageView 圓形圖片實現一:BitmapShader package com.open.widget; import android.content.Context; import android.graphics.Bitmap; impor

    自定義ImageView實現圓角

    package com.electric.view; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Bitmap

    關於android 圓角的問題,包括圓角Imageview的顯示問題。

    開發中經常會遇到需要圓角的問題。我們解決的途徑無非就是幾種: 1.自定義圓角view。 2.Glide載入圓角。 3.寫drawable的shape檔案來定義圓角資原始檔。 4.控制元件的背景用設計切的圓角圖片替代。 這裡討論情況1,3 遇到的問題,如下: 1.自