您当前的位置: 首页 >  android

lichong951

暂无认证

  • 3浏览

    0关注

    131博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【Android】Drawable裁剪圆形、椭圆、圆角矩形图片(89/100)

lichong951 发布时间:2022-08-02 10:00:00 ,浏览量:3

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

自定义CircleDrawable:

package top.lc951.myandroid.views;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Shader;
import android.graphics.drawable.BitmapDrawable;

/**
 * @author lichong
 * 2022年08月01日14:40:45
 */
public class CircleDrawable extends BitmapDrawable {
    private Paint mPaint = new Paint(); // 声明一个画笔对象

    public CircleDrawable(Context ctx, Bitmap bitmap) {
        super(ctx.getResources(), bitmap);
        // 创建一个位图着色器,CLAMP表示边缘拉伸
        BitmapShader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
        mPaint.setShader(shader); // 设置画笔的着色器对象
    }

    @Override
    public void draw(Canvas canvas) {
        int width = getBitmap().getWidth();
        int height = getBitmap().getHeight();
        int radius = Math.min(width, height) / 2 - 4;
        // 在画布上绘制圆形,也就是只显示圆形内部的图像
        canvas.drawCircle(width/2, height/2, radius, mPaint);
    }
}

OvalDrawable:

package top.lc951.myandroid.views;

import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Shader;
import android.graphics.drawable.BitmapDrawable;

/**
 * @author lichong
 * 2022年08月01日14:37:09
 */
public class OvalDrawable extends BitmapDrawable {
    private Paint mPaint =new Paint();

    public OvalDrawable(Resources res, Bitmap bitmap) {
        super(res, bitmap);
// 创建一个位图着色器,CLAMP表示边缘拉伸
        BitmapShader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
        mPaint.setShader(shader); // 设置画笔的着色器对象
    }

    @Override
    public void draw(Canvas canvas) {
        canvas.drawOval(0,0,getBitmap().getWidth(),getBitmap().getHeight(),mPaint);
    }
}

RoundDrawable:

package top.lc951.myandroid.views;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import android.graphics.Shader;
import android.graphics.drawable.BitmapDrawable;

import com.example.indicatorlib.utils.Utils;

/**
 * @author lichong
 * 2022年08月01日14:49:26
 */
public class RoundDrawable extends BitmapDrawable {
    private Paint mPaint = new Paint(); // 声明一个画笔对象
    private int mRoundRadius; // 圆角的半径

    public RoundDrawable(Context ctx, Bitmap bitmap) {
        super(ctx.getResources(), bitmap);
        // 创建一个位图着色器,CLAMP表示边缘拉伸
        BitmapShader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
        mPaint.setShader(shader); // 设置画笔的着色器对象
        mRoundRadius = Utils.dp2px(ctx, 30);
    }

    @Override
    public void draw(Canvas canvas) {
        RectF rect = new RectF(0, 0, getBitmap().getWidth(), getBitmap().getHeight());
        // 在画布上绘制圆角矩形,也就是只显示圆角矩形内部的图像
        canvas.drawRoundRect(rect, mRoundRadius, mRoundRadius, mPaint);
    }
}

借用之前的图片变化BitmapColorModeActivity,添加使用如下:


    private String[] colorNameArray = {"原色", "黑白", "底片", "怀旧", "模糊"
            , "圆形剪裁"
            , "椭圆剪裁"
            , "圆角矩形剪裁"
    };

    private void initSpinner() {
        mOriginBitmap = BitmapFactory.decodeResource(getResources()
                , R.mipmap.ic_img06);
        ArrayAdapter colorAdapter = new ArrayAdapter(this,
                android.R.layout.simple_list_item_1, colorNameArray);
        Spinner spinner = findViewById(R.id.spinner);
        spinner.setAdapter(colorAdapter);
        spinner.setSelection(0);
        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView parent, View view, int position, long id) {
                Bitmap bitmap;
                switch (position) {
                    case 0:
                        bitmap = mOriginBitmap;
                        break;
                    case 1:
                        bitmap = BitmapUtil.convertBlack(mOriginBitmap); // 转换为黑白效果
                        break;
                    case 2:
                        bitmap = BitmapUtil.convertNegative(mOriginBitmap); // 转换为底片效果
                        break;
                    case 3:
                        bitmap = BitmapUtil.convertOld(mOriginBitmap); // 转换为怀旧效果
                        break;
                    case 4:
                        bitmap = BitmapUtil.convertBlur(mOriginBitmap); // 转换为模糊效果
                        break;
                    case 5:
                        Drawable drawable = new CircleDrawable(BitmapColorModeActivity.this, mOriginBitmap);
                        pictureIv.setImageDrawable(drawable); // 设置图像视图的图形对象
                        return;
                       case 6:
                        Drawable ovalDrawable = new OvalDrawable(BitmapColorModeActivity.this.getResources()
                                , mOriginBitmap);
                        pictureIv.setImageDrawable(ovalDrawable); // 设置图像视图的图形对象
                        return;
                       case 7:
                        Drawable roundDrawable = new RoundDrawable(BitmapColorModeActivity.this
                                , mOriginBitmap);
                        pictureIv.setImageDrawable(roundDrawable); // 设置图像视图的图形对象
                        return;

                    default:
                        bitmap = mOriginBitmap;

                }
                pictureIv.setImageBitmap(bitmap);
            }

关注
打赏
1659512212
查看更多评论
立即登录/注册

微信扫码登录

0.0735s