zoukankan      html  css  js  c++  java
  • Android 图片设置圆角 方法之二

    Android中经常会遇到对图片进行二次处理,例如加圆角,或者显示圆形图片。接下来我们再介绍一种方法。

    首先,

           自定义ImageView:

      android:id="@+id/iv"

      android:layout_width="300dp"

      android:layout_height="300dp"

      android:layout_centerHorizontal="true"

      />

      ImageView iv = findViewById(R.id.iv);

      Bitmap bitmap =BitmapFactory.decodeResource(getResources(), R.drawable.fengjing);

      Bitmap outBitmap =getRoundBitmapByShader(bitmap, 500,300,20, 3);

      iv.setImageBitmap(outBitmap);

      public class RoundRectImageView extends ImageView{

      private Paint paint;

      public RoundRectImageView(Context context) {

      this(context,null);

      }

      public RoundRectImageView(Context context, AttributeSet attrs) {

      this(context, attrs,0);

      }

      public RoundRectImageView(Context context, AttributeSet attrs, int defStyle) {

      super(context, attrs, defStyle);

      paint = new Paint();

      }

      /**

      * 绘制圆角矩形图片

      * @author caizhiming

      */

      @Override

      protected void onDraw(Canvas canvas) {

      Drawable drawable = getDrawable();

      if (null != drawable) {

      Bitmap bitmap = getBitmapFromDrawable(drawable);

      // Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();

      Bitmap b = getRoundBitmapByShader(bitmap,getWidth(),getHeight(), 50,0);

      final Rect rectSrc = new Rect(0, 0, b.getWidth(), b.getHeight());

      final Rect rectDest = new Rect(0,0,getWidth(),getHeight());

      paint.reset();

      canvas.drawBitmap(b, rectSrc, rectDest, paint);

      } else {

      super.onDraw(canvas);

      }

      }

      /**

      * 把资源图片转换成Bitmap

      * @param drawable

      * 资源图片

      * @return 位图

      */

      public static Bitmap getBitmapFromDrawable(Drawable drawable) {

      int width = drawable.getIntrinsicWidth();

      int height = drawable.getIntrinsicHeight();

      Bitmap bitmap = Bitmap.createBitmap(width, height, drawable

      .getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888

      : Bitmap.Config.RGB_565);

      Canvas canvas = new Canvas(bitmap);

      //drawable.setBounds(-4, -4, width + 4, height + 4);

      drawable.draw(canvas);

      return bitmap;

      }

      public static Bitmap getRoundBitmapByShader(Bitmap bitmap, int outWidth, int outHeight, int radius, int boarder) {

      if (bitmap == null) {

      return null;

      }

      int width = bitmap.getWidth();

      int height = bitmap.getHeight();

      float widthScale = outWidth * 1f / width;

      float heightScale = outHeight * 1f / height;

      Matrix matrix = new Matrix();

      matrix.setScale(widthScale, heightScale);

      //创建输出的bitmap

      Bitmap desBitmap = Bitmap.createBitmap(outWidth, outHeight, Bitmap.Config.ARGB_8888);

      //创建canvas并传入desBitmap,这样绘制的内容都会在desBitmap上

      Canvas canvas = new Canvas(desBitmap);

      Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);

      //创建着色器

      BitmapShader bitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);

      //给着色器配置matrix

      bitmapShader.setLocalMatrix(matrix);

      paint.setShader(bitmapShader);

      //创建矩形区域并且预留出border

      RectF rect = new RectF(boarder, boarder, outWidth - boarder, outHeight - boarder);

      //把传入的bitmap绘制到圆角矩形区域内

      canvas.drawRoundRect(rect, radius, radius, paint);

      if (boarder > 0) {

      //绘制boarder无锡妇科费用 http://www.wxbhnkyy39.com

      Paint boarderPaint = new Paint(Paint.ANTI_ALIAS_FLAG);

      boarderPaint.setColor(Color.GREEN);

      boarderPaint.setStyle(Paint.Style.STROKE);

      boarderPaint.setStrokeWidth(boarder);

      canvas.drawRoundRect(rect, radius, radius, boarderPaint);

      }

      return desBitmap;

      }

      }

  • 相关阅读:
    Java中测试对象的等价性
    Python文件方法
    Python在windows下的安装与配置
    ubuntu日志清理
    hiho48 : 欧拉路·一
    ADO.NET异步操作测试
    c# 生成二维码
    PowerCmd 2.2 注册码
    IE跨Iframe时Session丢失问题
    MongoDB3.0 创建用户
  • 原文地址:https://www.cnblogs.com/djw12333/p/10900182.html
Copyright © 2011-2022 走看看