Android中自定义圆形图片(二)

来源:互联网 发布:下载最快的软件 编辑:程序博客网 时间:2024/06/04 19:16

android中自定义圆形图片
第一篇已经介绍过了,这个主要是写法不同,别的,都相同,下面不在废话,贴代码。

这里写代码片xml布局代码<?xml version="1.0" encoding="utf-8"?><RelativeLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/activity_main"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context=".MainActivity"    >    <com.example.cn.bgs.circleimageviewdemoa.CircleImageView        android:id="@+id/image1"        android:layout_width="200dp"        android:layout_height="220dp"        android:layout_centerInParent="true"        android:scaleType="centerCrop"        android:src="@drawable/yyy"        />    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_below="@+id/image1"        android:layout_centerHorizontal="true"        android:layout_marginTop="10dp"        android:text="女神"        android:textColor="#333333"        android:textSize="17sp"        /></RelativeLayout>
这里写代码片MainActivity代码package com.example.cn.bgs.circleimageviewdemoa;import android.os.Bundle;import android.app.Activity;import android.view.Menu;public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }}
这里写代码片CircleImageView代码package com.example.cn.bgs.circleimageviewdemoa;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapShader;import android.graphics.Canvas;import android.graphics.Matrix;import android.graphics.Paint;import android.graphics.Shader;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.Drawable;import android.util.AttributeSet;import android.widget.ImageView;public class CircleImageView extends ImageView {    private Paint mPaint; //画笔    private int mRadius; //圆形图片的半径    private float mScale; //图片的缩放比例    public CircleImageView(Context context) {        super(context);    }    public CircleImageView(Context context, AttributeSet attrs) {        super(context, attrs);    }    public CircleImageView(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);    }    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        super.onMeasure(widthMeasureSpec, heightMeasureSpec);        //因为是圆形图片,所以应该让宽高保持一致        int size = Math.min(getMeasuredWidth(), getMeasuredHeight());        mRadius = size / 2;        setMeasuredDimension(size, size);    }    @Override    protected void onDraw(Canvas canvas) {        mPaint = new Paint();        Bitmap bitmap = drawableToBitmap(getDrawable());        //初始化BitmapShader,传入bitmap对象        BitmapShader bitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);        //计算缩放比例        mScale = (mRadius * 2.0f) / Math.min(bitmap.getHeight(), bitmap.getWidth());        Matrix matrix = new Matrix();        matrix.setScale(mScale, mScale);        bitmapShader.setLocalMatrix(matrix);        mPaint.setShader(bitmapShader);        //画圆形,指定好中心点坐标、半径、画笔        canvas.drawCircle(mRadius, mRadius, mRadius, mPaint);    }    //写一个drawble转BitMap的方法    private Bitmap drawableToBitmap(Drawable drawable) {        if (drawable instanceof BitmapDrawable) {            BitmapDrawable bd = (BitmapDrawable) drawable;            return bd.getBitmap();        }        int w = drawable.getIntrinsicWidth();        int h = drawable.getIntrinsicHeight();        Bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);        Canvas canvas = new Canvas(bitmap);        drawable.setBounds(0, 0, w, h);        drawable.draw(canvas);        return bitmap;    }}

下面看一下效果图:
这里写图片描述

一切都结束了,圆形图片告一段落,,,,哈哈哈哈,,,,,希望大家多多指教,,,,,,

原创粉丝点击