zoukankan      html  css  js  c++  java
  • android中的一个圆角图片

    RoundedImageView

    A fast ImageView (and Drawable) that supports rounded corners (and ovals or circles) based on the original example from Romain Guy. RoundedImageView is a full superset of CircleImageView (which is actually just a subset based on this lib) with many more advanced features like support for ovals, rounded rectangles, ScaleTypes and TileModes.

    RoundedImageView screenshot RoundedImageView screenshot with ovals

    There are many ways to create rounded corners in android, but this is the fastest and best one that I know of because it:

    • does not create a copy of the original bitmap
    • does not use a clipPath which is not hardware accelerated and not anti-aliased.
    • does not use setXfermode to clip the bitmap and draw twice to the canvas.

    If you know of a better method, let me know (or even better open a pull request)!

    Also has proper support for:

    • Borders (with Colors and ColorStateLists)
    • Ovals and Circles
    • All ScaleTypes
      • Borders are drawn at view edge, not bitmap edge
      • Except on edges where the bitmap is smaller than the view
      • Borders are not scaled up/down with the image (correct width and radius are maintained)
    • Anti-aliasing
    • Transparent backgrounds
    • Hardware acceleration
    • Support for LayerDrawables (including TransitionDrawables)
    • TileModes for repeating drawables

    Gradle

    RoundedImageView is available in Maven Central.

    Add the following to your build.gradle to use:

    repositories {
        mavenCentral()
    }
    
    dependencies {
        compile 'com.makeramen:roundedimageview:2.2.0'
    }
    

    Usage

    Define in xml:

    <com.makeramen.roundedimageview.RoundedImageView
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:id="@+id/imageView1"
            android:src="@drawable/photo1"
            android:scaleType="fitCenter"
            app:riv_corner_radius="30dip"
            app:riv_border_width="2dip"
            app:riv_border_color="#333333"
            app:riv_mutate_background="true"
            app:riv_tile_mode="repeat"
            app:riv_oval="true" />

    Or in code:

    RoundedImageView riv = new RoundedImageView(context);
    riv.setScaleType(ScaleType.CENTER_CROP);
    riv.setCornerRadius((float) 10);
    riv.setBorderWidth((float) 2);
    riv.setBorderColor(Color.DKGRAY);
    riv.mutateBackground(true);
    riv.setImageDrawable(drawable);
    riv.setBackground(backgroundDrawable);
    riv.setOval(true);
    riv.setTileModeX(Shader.TileMode.REPEAT);
    riv.setTileModeY(Shader.TileMode.REPEAT);

    Or make a Transformation for Picasso:

    Transformation transformation = new RoundedTransformationBuilder()
              .borderColor(Color.BLACK)
              .borderWidthDp(3)
              .cornerRadiusDp(30)
              .oval(false)
              .build();
    
    Picasso.with(context)
        .load(url)
        .fit()
        .transform(transformation)
        .into(imageView);

    Changelog

    see Releases

    项目地址:https://github.com/vinc3m1/RoundedImageView

  • 相关阅读:
    3D数学 矩阵的更多知识(5)
    D3D中的光照(1)
    双节棍(C语言版)
    D3D中的Alpha融合技术(1)
    D3D编程必备的数学知识(5)
    Direct3D中的绘制(1)
    初始化Direct3D(2)
    D3D中的纹理映射(2)
    Direct3D中的绘制(1)
    D3D编程必备的数学知识(2)
  • 原文地址:https://www.cnblogs.com/ArRan/p/4766067.html
Copyright © 2011-2022 走看看