gpt4 book ai didi

java - 如何制作圆角方形组图标而不是圆形组图标

转载 作者:太空宇宙 更新时间:2023-11-04 11:45:56 26 4
gpt4 key购买 nike

您好,我有一个一直在开发的启动器,我想将文件夹图标设置为圆角正方形,如下所示:enter image description here

现在它是一个圆形,形状是通过java代码制作的,没有使用xml

代码如下:

package com.appname.viewutil;

import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PixelFormat;
import android.graphics.RectF;
import android.graphics.Region;
import android.graphics.drawable.Drawable;

import com.launchername.activity.Home;
import com.launchername.util.Tool;

public class GroupIconDrawable extends Drawable{

private int outlinepad;
Bitmap[] icons;
public float iconSize;
Paint paint;
Paint paint2;
Paint paint4;
private int iconSizeDiv2;
private float padding;

private float scaleFactor = 1;

private boolean needAnimate, needAnimateScale;

private float sx = 1;
private float sy = 1 ;

public GroupIconDrawable(Bitmap[] icons,float size){
init(icons,size);
}

private void init(Bitmap[] icons,float size){
this.icons = icons;
this.iconSize = size;
iconSizeDiv2 = Math.round(iconSize / 2f);
padding = iconSize /25f;

this.paint = new Paint();
paint.setColor(Color.WHITE);
paint.setAlpha(150);
paint.setAntiAlias(true);

this.paint4 = new Paint();
paint4.setColor(Color.WHITE);
paint4.setAntiAlias(true);
paint4.setFlags(Paint.ANTI_ALIAS_FLAG);
paint4.setStyle(Paint.Style.STROKE);
outlinepad = Tool.dp2px(2, Home.launcher);
paint4.setStrokeWidth(outlinepad);

this.paint2 = new Paint();
paint2.setAntiAlias(true);
paint2.setFilterBitmap(true);
}

public void popUp(){
sy = 1;
sx = 1;
needAnimate = true;
needAnimateScale = true;
invalidateSelf();
}

public void popBack(){
needAnimate = false;
needAnimateScale = false;
invalidateSelf();
}

@Override
public void draw(Canvas canvas) {
canvas.save();

if (needAnimateScale){
scaleFactor = Tool.clampFloat(scaleFactor-0.09f,0.5f,1f);
}else {
scaleFactor = Tool.clampFloat(scaleFactor+0.09f,0.5f,1f);
}

canvas.scale(scaleFactor,scaleFactor,iconSize/2,iconSize/2);

Path clipp = new Path();

clipp.addCircle(iconSize / 2,iconSize / 2,iconSize / 2-outlinepad, Path.Direction.CW);
canvas.clipPath(clipp, Region.Op.REPLACE);

canvas.drawCircle(iconSize / 2, iconSize / 2, iconSize / 2-outlinepad,paint);

canvas.drawBitmap(icons[0],null,new RectF(padding,padding, iconSizeDiv2-padding, iconSizeDiv2-padding),paint2);
canvas.drawBitmap(icons[1],null,new RectF(iconSizeDiv2+padding,padding,iconSize-padding, iconSizeDiv2-padding),paint2);
canvas.drawBitmap(icons[2],null,new RectF(padding, iconSizeDiv2+padding, iconSizeDiv2-padding,iconSize-padding),paint2);
canvas.drawBitmap(icons[3],null,new RectF(iconSizeDiv2+padding, iconSizeDiv2+padding,iconSize-padding,iconSize-padding),paint2);

canvas.clipRect(0,0,iconSize,iconSize, Region.Op.REPLACE);

canvas.drawCircle(iconSize / 2, iconSize / 2, iconSize/2-outlinepad,paint4);
canvas.restore();

if (needAnimate){
paint2.setAlpha(Tool.clampInt(paint2.getAlpha()-25,0,255));
invalidateSelf();
}else if (paint2.getAlpha() != 255){
paint2.setAlpha(Tool.clampInt(paint2.getAlpha()+25,0,255));
invalidateSelf();
}
}

@Override
public void setAlpha(int i) {}

@Override
public void setColorFilter(ColorFilter colorFilter) {}

@Override
public int getOpacity() {return PixelFormat.TRANSPARENT;}
}

关于如何将其变成如图所示的圆角正方形,有什么想法吗?

任何帮助都会很棒!

提前致谢:)

最佳答案

将对 addCircle 和 drawCircle 的调用替换为适当的 RoundRect 函数 - addRoundRect 和 drawRoundRect。

关于java - 如何制作圆角方形组图标而不是圆形组图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42357786/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com