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

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

自定义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<String> 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);
            }

自研产品推荐

推荐理由

postman在国内使用已经越来越困难:
1、登录问题严重
2、Mock功能服务基本没法使用
3、版本更新功能已很匮乏
4、某些外力因素导致postman以后能否使用风险较大
出于以上考虑因此笔者自己开发了一款api调试开发工具SmartApi,满足基本日常开发调试api需求

简介

历时一年半多开发终于smartApi-v1.0.0版本在2023-09-15晚十点正式上线
smartApi是一款对标国外的postman的api调试开发工具,由于开发人力就作者一个所以人力有限,因此v1.0.0版本功能进行精简,大功能项有:

  • api参数填写
  • api请求响应数据展示
  • PDF形式的分享文档
  • Mock本地化解决方案
  • api列表数据本地化处理
  • 再加上UI方面的打磨

下面是一段smartApi使用介绍:
在这里插入图片描述

下载地址:

https://pan.baidu.com/s/1kFAGbsFIk3dDR64NwM5y2A?pwd=csdn

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lichong951

你的鼓励决定更新的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值