android中自定义圆形图片
1,前天写了自定义属性,今天就来介绍一下自定义圆形图片。其实再写自定义圆形图片时也没用到自定义属性;

2,在写这个时将会用到几个控件:

Paint(画笔)
用于设置绘制风格,如:线宽(笔触粗细),颜色,透明度和填充风格等 直接使用无参构造方法就可以创建Paint实例: Paint paint = new Paint( );

可以通过下述方法来设置Paint(画笔)的相关属性,另外,关于这个属性有两种, 图形绘制相关与文本绘制相关:
setARGB(int a,int r,int g,int b): 设置绘制的颜色,a代表透明度,r,g,b代表颜色值。

setAlpha(int a): 设置绘制图形的透明度。

setColor(int color): 设置绘制的颜色,使用颜色值来表示,该颜色值包括透明度和RGB颜色。

setAntiAlias(boolean aa): 设置是否使用抗锯齿功能,会消耗较大资源,绘制图形速度会变慢。

setDither(boolean dither): 设定是否使用图像抖动处理,会使绘制出来的图片颜色更加平滑和饱满,图像更加清晰

3,画笔有了,自然会少不了Canvas(画布):

首先是构造方法,Canvas的构造方法有两种:

Canvas(): 创建一个空的画布,可以使用setBitmap()方法来设置绘制具体的画布。
Canvas(Bitmap bitmap): 以bitmap对象创建一个画布,将内容都绘制在bitmap上,因此bitmap不得为null。

4,drawXXX()方法族:以一定的坐标值在当前画图区域画图,另外图层会叠加, 即后面绘画的图层会覆盖前面绘画的图层。 比如:

drawCircle(float cx, float cy, float radius,Paint paint): 绘制圆,参数一是中心点的x轴,参数二是中心点的y轴,参数三是半径,参数四是paint对象;

drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint);对图片剪接和限定显示区域Rect src: 是对图片进行裁截,若是空null则显示整个图片RectF dst:是图片在Canvas画布中显示的区域,大于src则把src的裁截区放大,小于src则把src的裁截区缩小

5,我们知道ARGB指的是一种色彩模式,里面A代表Alpha,R表示red,G表示green,B表示blue,其实所有的可见色都是右红绿蓝组成的,所以红绿蓝又称为三原色,每个原色都存储着所表示颜色的信息值
这都是色彩的存储方法:

ALPHA_8就是Alpha由8位组成
ARGB_4444就是由4个4位组成即16位,
ARGB_8888就是由4个8位组成即32位,
RGB_565就是R为5位,G为6位,B为5位共16位

由此可见:
ALPHA_8 代表8位Alpha位图
ARGB_4444 代表16位ARGB位图
ARGB_8888 代表32位ARGB位图

RGB_565 代表8位RGB位图位图位数越高代表其可以存储的颜色信息越多,当然图像也就越逼真。

6,paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));这句代码是为paint设置绘图模式,具体含义如下:

setXfermode设置两张图片相交时的模式。

就是在已有的图像上绘图将会在其上面添加一层新的形状。如果新的Paint是完全不透明的,那么它将完全遮挡住下面的Paint;如果它是部分透明的,那么它将会被染上下面的颜色。

下面给你们贴一下代码:

这里写代码片

xml布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <ImageView
        android:id="@+id/img"
        android:layout_width="180dp"
        android:layout_height="200dp"
        android:src="@drawable/ic_launcher"
        android:layout_centerInParent="true"/>

</RelativeLayout>

这里写代码片

MainActivity代码
public class MainActivity extends Activity { private ImageView img; private String path

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    img = (ImageView) findViewById(R.id.img);
    loadImg();
}

private void loadImg() {
    new Thread(new Runnable() {

        @Override
        public void run() {
            try {
                URL url = new URL(path);
                HttpURLConnection conn = (HttpURLConnection) url
                        .openConnection();
                InputStream in = conn.getInputStream();
                final Bitmap bitmap = BitmapFactory.decodeStream(in);
                final Bitmap bit = getBound(bitmap);
                runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        // TODO Auto-generated method stub
                        if (bitmap != null) {
                            img.setImageBitmap(bit);
                        }
                    }
                });

            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    }).start();

}

private Bitmap getBound(Bitmap bitmap) {
    // 根据传入的bitmap创建一个bitmap2,宽高根据bitmap,并改变图片格式
    Bitmap bitmap2 = Bitmap.createBitmap(bitmap.getWidth(),
            bitmap.getHeight(), Config.ARGB_4444);
    // 创建画布并将bitmap2当作画布的背景
    Canvas canvas = new Canvas(bitmap2);
    // 创建画布并设为抗锯齿
    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    // 设置画笔颜色
    paint.setColor(Color.RED);
    // 设置画布填充色
    canvas.drawARGB(0, 0, 0, 0);
    // 计算绘制圆的半径
    float radius = Math.min(bitmap.getWidth(), bitmap.getHeight()) / 2;
    // 根据bitmap的宽高的中心点为圆点和圆的半径画圆
    canvas.drawCircle(bitmap.getWidth() / 2, bitmap.getHeight() / 2,
            radius, paint);
    // 重置画笔
    paint.reset();
    // 两个view重叠的部分
    paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
    // 把bitmap画到画布上 第一个0代表位图左边的位置;第二个0代表顶部的位置;
    canvas.drawBitmap(bitmap, 0, 0, paint);
    return bitmap2;
}

}

我写的这个是从网上获取的图片,千万不要忘记加联网权限,然后进行搓圆;

重要内容

需要加联网权限

下面看一下效果图:

android 画一个圆填充 android怎么设置圆形图片_自定义圆形图片

好了,功能也就实现了,哈哈哈,还有另一用写法,下篇我将写出来让大家看下。。。。。。