第二阶段冲刺七

今天主要完成的任务:构建我的界面

遇到的困难:图片圆形化的问题

解决办法:采用工具类进行裁剪即可

源程序代码:

BitmapUtils.java

package com.itheima.network.func_reference;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class BitmapUtils
{
    /**
     * 代码:功能性代码;非功能性代码。
     *
     * @param source
     * @return
     */
    public static Bitmap circleBitmap(Bitmap source) {
        //获取Bitmap的宽度
        int width = source.getWidth();
        //以Bitmap的宽度值作为新的bitmap的宽高值。
        Bitmap bitmap = Bitmap.createBitmap(width, width, Bitmap.Config.ARGB_8888);
        //以此bitmap为基准,创建一个画布
        Canvas canvas = new Canvas(bitmap);
        Paint paint = new Paint();
        paint.setAntiAlias(true);
        //在画布上画一个圆
        canvas.drawCircle(width / 2, width / 2, width / 2, paint);

        //设置图片相交情况下的处理方式
        //setXfermode:设置当绘制的图像出现相交情况时候的处理方式的,它包含的常用模式有:
        //PorterDuff.Mode.SRC_IN 取两层图像交集部分,只显示上层图像
        //PorterDuff.Mode.DST_IN 取两层图像交集部分,只显示下层图像
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
        //在画布上绘制bitmap
        canvas.drawBitmap(source, 0, 0, paint);
        return bitmap;

    }

    //实现图片的压缩处理
    //设置宽高必须使用浮点型,否则导致压缩的比例:0
    public static Bitmap zoom(Bitmap source, float width , float height){

        Matrix matrix = new Matrix();
        //图片的压缩处理
        matrix.postScale(width / source.getWidth(),height / source.getHeight());

        Bitmap bitmap = Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(), matrix, false);
        return bitmap;
    }


    public static void saveBitmap( Bitmap bm, Context mContext)
    {
        String TargetPath = mContext.getFilesDir() + "/image/";
        File file=new File(TargetPath);
        if (!file.exists())
        {
            file.mkdir();
        }
        File saveFile = new File(TargetPath,"icon.png");
        try {
            FileOutputStream saveImgOut = new FileOutputStream(saveFile);
            bm.compress(Bitmap.CompressFormat.JPEG, 100, saveImgOut);
            saveImgOut.flush();
            saveImgOut.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

}
View Code

运行截图:

 

posted @ 2020-05-28 19:34  一粒盐  阅读(128)  评论(0编辑  收藏  举报