zoukankan      html  css  js  c++  java
  • 圆角图片以及特殊形状的图片绘制方法

    今天研究了一下圆角图片与布局,布局的话可以直接使用shape来完成,定义一个myshape.xml,来定义圆角

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid android:color="#fff"/>
    <corners android:radius="32px"/>
    <padding android:bottom="5px"/>
    <padding android:top="5px"/>
    <padding android:left="5px"/>
    <gradient android:gradientRadius="50" android:startColor="#aabbcc"
    android:endColor="#ffffff"
    android:type="linear"
    android:angle="270"

    />
    </shape>


    以上代码是定义一个带有圆角的形状 corners用来定义圆角的半径, gradient用来设置渐变. 讲myshape.xml放入到drawable文件夹下.
    然后在布局中引用 直接使用android:background="@drawable/myshape"即可,作为背景使用就好.

    圆角图片最开始瞎忙乎了几个小时,一心就像完全可以通过shape来实现,后来发现ImageView在应用Shape背景后,它的绘制区域还是一个正方形.
    要实现圆角图片两种方法:
    1.使用canvas重绘与Path重绘
    2.继承ImageView 在onDraw方法中绘制 (与上面的方法基本相同,只是不需要在将图片处理的代码放到逻辑中了)

    我比较懒,使用第一种方式非常是和我这样的懒人.

    pngBM为原始的图片对象
    Bitmap src = pngBM.copy(Bitmap.Config.ARGB_8888, true);
    dest = Bitmap.createBitmap(pngBM.getWidth(), pngBM.getHeight(), Bitmap.Config.ARGB_8888);
    int radius = pngBM.getWidth() / 2;//src为我们要画上去的图,跟上一个示例中的bitmap一样。
    if(pngBM.getWidth()>pngBM.getHeight()) {
    radius = pngBM.getHeight()/2;
    }


    Canvas c = new Canvas(dest);
    Paint paint = new Paint();
    paint.setColor(Color.BLACK);
    paint.setAntiAlias(true);
    Path path = new Path();
    path.addCircle(radius, radius, radius, Path.Direction.CW);
    c.clipPath(path); //裁剪区域
    c.drawBitmap(src, 0, 0, paint);//把图画上去

    使用一张新的画布来从新按照圆形的Path绘制! Path可以实现任意形状的绘制!


  • 相关阅读:
    Spring + mybatis 主从数据库分离读写的几种方式(二)
    Spring + mybatis 主从数据库分离读写的几种方式(一)
    AS3隐藏特性——深拷贝数据对象
    如何高效地抽离出两个数组中的相同元素
    资料合集2
    Trace类
    网页游戏心跳机制
    stage3d 你不知道的巨坑
    打包一组xml数据ByteArray
    利用BlendMode做镂空擦除效果
  • 原文地址:https://www.cnblogs.com/raffeale/p/4630594.html
Copyright © 2011-2022 走看看