最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android自定義ImageView實現(xiàn)圓角功能

 更新時間:2018年12月20日 11:48:35   作者:676598624  
這篇文章主要為大家詳細介紹了Android自定義ImageView實現(xiàn)圓角功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下

使用自定義ImageView,實現(xiàn)圓角功能,供大家參考,具體內容如下

1.自定義屬性attrs.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <declare-styleable name="RoundCornerImageView">
    <attr name="radius" format="dimension" />
    <attr name="left_top_radius" format="dimension" />
    <attr name="right_top_radius" format="dimension" />
    <attr name="right_bottom_radius" format="dimension" />
    <attr name="left_bottom_radius" format="dimension" />
  </declare-styleable>
</resources>

2.自定義RoundCornerImageView,繼承AppCompatImageView

public class RoundCornerImageView extends AppCompatImageView {
  private float width, height;
  private int defaultRadius = 0;
  private int radius;
  private int leftTopRadius;
  private int rightTopRadius;
  private int rightBottomRadius;
  private int leftBottomRadius;


  public RoundCornerImageView(Context context) {
    this(context, null);
    init(context, null);
  }

  public RoundCornerImageView(Context context, AttributeSet attrs) {
    this(context, attrs, 0);
    init(context, attrs);
  }

  public RoundCornerImageView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    init(context, attrs);
  }

  private void init(Context context, AttributeSet attrs) {
    if (Build.VERSION.SDK_INT < 18) {
      setLayerType(View.LAYER_TYPE_SOFTWARE, null);
    }
    // 讀取配置
    TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.RoundCornerImageView);
    radius = array.getDimensionPixelOffset(R.styleable.RoundCornerImageView_radius, defaultRadius);
    leftTopRadius = array.getDimensionPixelOffset(R.styleable.RoundCornerImageView_left_top_radius, defaultRadius);
    rightTopRadius = array.getDimensionPixelOffset(R.styleable.RoundCornerImageView_right_top_radius, defaultRadius);
    rightBottomRadius = array.getDimensionPixelOffset(R.styleable.RoundCornerImageView_right_bottom_radius, defaultRadius);
    leftBottomRadius = array.getDimensionPixelOffset(R.styleable.RoundCornerImageView_left_bottom_radius, defaultRadius);


    //如果四個角的值沒有設置,那么就使用通用的radius的值。
    if (defaultRadius == leftTopRadius) {
      leftTopRadius = radius;
    }
    if (defaultRadius == rightTopRadius) {
      rightTopRadius = radius;
    }
    if (defaultRadius == rightBottomRadius) {
      rightBottomRadius = radius;
    }
    if (defaultRadius == leftBottomRadius) {
      leftBottomRadius = radius;
    }
    array.recycle();
  }


  @Override
  protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
    super.onLayout(changed, left, top, right, bottom);
    width = getWidth();
    height = getHeight();
  }

  @Override
  protected void onDraw(Canvas canvas) {
    //這里做下判斷,只有圖片的寬高大于設置的圓角距離的時候才進行裁剪
    int maxLeft = Math.max(leftTopRadius, leftBottomRadius);
    int maxRight = Math.max(rightTopRadius, rightBottomRadius);
    int minWidth = maxLeft + maxRight;
    int maxTop = Math.max(leftTopRadius, rightTopRadius);
    int maxBottom = Math.max(leftBottomRadius, rightBottomRadius);
    int minHeight = maxTop + maxBottom;
    if (width >= minWidth && height > minHeight) {
      Path path = new Path();
      //四個角:右上,右下,左下,左上
      path.moveTo(leftTopRadius, 0);
      path.lineTo(width - rightTopRadius, 0);
      path.quadTo(width, 0, width, rightTopRadius);

      path.lineTo(width, height - rightBottomRadius);
      path.quadTo(width, height, width - rightBottomRadius, height);

      path.lineTo(leftBottomRadius, height);
      path.quadTo(0, height, 0, height - leftBottomRadius);

      path.lineTo(0, leftTopRadius);
      path.quadTo(0, 0, leftTopRadius, 0);

      canvas.clipPath(path);
    }
    super.onDraw(canvas);
  }

}

3.布局文件中使用

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical"
  tools:context="voicedemo.iflytek.com.roundimage.MainActivity">

  <voicedemo.iflytek.com.roundimage.RoundCornerImageView
    android:id="@+id/iv_avatar"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:layout_marginBottom="10dp"
    android:layout_marginTop="50dp"
    android:scaleType="centerCrop"
    app:left_top_radius="20dp"
    app:right_top_radius="20dp"
    />
</LinearLayout>

4.調用

public class MainActivity extends AppCompatActivity {

  String avatarUrl = "19e9d4c0a8f1cd033ecac3692_th.jpg";

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ImageView ivAvatar = findViewById(R.id.iv_avatar);

    Glide.with(this).load(avatarUrl).into(ivAvatar);

  }
} 

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Android實現(xiàn)手勢劃定區(qū)域裁剪圖片

    Android實現(xiàn)手勢劃定區(qū)域裁剪圖片

    這篇文章主要為大家詳細介紹了Android實現(xiàn)手勢劃定區(qū)域裁剪圖片,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Android讀取properties配置文件的實例詳解

    Android讀取properties配置文件的實例詳解

    這篇文章主要介紹了Android讀取properties配置文件的實例詳解的相關資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • android調用C語言實現(xiàn)內存的讀取與修改的方法示例

    android調用C語言實現(xiàn)內存的讀取與修改的方法示例

    這篇文章主要介紹了android調用C語言實現(xiàn)內存的讀取與修改的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • Android Canvas方法總結最全面詳解API(小結)

    Android Canvas方法總結最全面詳解API(小結)

    本篇文章主要介紹了Android Canvas方法總結最全面詳解API(小結),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • android GridView多選效果的實例代碼

    android GridView多選效果的實例代碼

    在使用 GridView的時候,有時需要多選上面顯示的類容,比如批量刪除上面顯示的圖片,批量上傳圖片等。這個時候我們可以使用層疊圖來實現(xiàn),效果如下:
    2013-06-06
  • Android崩潰異常捕獲方法

    Android崩潰異常捕獲方法

    這篇文章主要介紹了Android崩潰異常捕獲方法的相關資料,需要的朋友可以參考下
    2016-03-03
  • Android 開機直接運行app并當做手機桌面的實例

    Android 開機直接運行app并當做手機桌面的實例

    今天小編就為大家分享一篇Android 開機直接運行app并當做手機桌面的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • Android 實現(xiàn)的下拉刷新效果

    Android 實現(xiàn)的下拉刷新效果

    最近在使用趕集網(wǎng)的時候,發(fā)現(xiàn)他的下拉刷新十分有趣,是一頭飛行的小毛驢,作為開發(fā)者自然心里癢癢打算把它做出來順便鍛煉下自己的動手能力。本文講解如何仿照實現(xiàn)該效果
    2021-06-06
  • Android編程之控件ListView使用方法

    Android編程之控件ListView使用方法

    這篇文章主要介紹了Android編程之控件ListView使用方法,實例分析了ListView控件的相關使用技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • Android實現(xiàn)閃屏歡迎界面

    Android實現(xiàn)閃屏歡迎界面

    這篇文章主要介紹了Android實現(xiàn)閃屏歡迎界面的相關資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02

最新評論

梅河口市| 田林县| 临城县| 平和县| 嘉义县| 河南省| 大安市| 定陶县| 资阳市| 务川| 文登市| 泾源县| 石首市| 岑巩县| 新营市| 临城县| 岢岚县| 鲁山县| 郴州市| 修武县| 闽侯县| 竹山县| 日照市| 乐安县| 龙门县| 甘孜县| 永善县| 华池县| 马公市| 延川县| 湟源县| 柞水县| 家居| 临桂县| 工布江达县| 松潘县| 寻乌县| 金山区| 临沧市| 开封县| 高平市|