我想创建一个圆形按钮,但中间有一个三角形。 用于发送按钮。我尝试使用XML和可绘制的,但总是有问题,当涉及到屏幕尺寸和意见不居中等总是等。如何在一个定向为播放按钮的圆圈内绘制完美的三角形
那么我怎么能只使用画布? 像我如何得到我需要绘制的点,例如,给定圆的半径,以及各种比例尺,给我三角形的点和绘制圆。 这里是什么,我想
一个图像
我想创建一个圆形按钮,但中间有一个三角形。 用于发送按钮。我尝试使用XML和可绘制的,但总是有问题,当涉及到屏幕尺寸和意见不居中等总是等。如何在一个定向为播放按钮的圆圈内绘制完美的三角形
那么我怎么能只使用画布? 像我如何得到我需要绘制的点,例如,给定圆的半径,以及各种比例尺,给我三角形的点和绘制圆。 这里是什么,我想
一个图像
我最近创建非常相似,你想要什么东西..
看看这个:https://www.desmos.com/calculator/2wpnxwwnty 怎么看数学/缩放作品。
这是导致该类:
public class TriangleInscribedCircle {
private Triangle inscribedTriangle;
private double s = 1;
private double r = 100;
public TriangleInscribedCircle(float radius, float scale) {
setScale(scale);
this.r = radius;
calculateTriangle();
}
public Triangle getInscribedTriangle() {
return this.inscribedTriangle;
}
public double getScale() {
return this.s;
}
public void setScale(double scale) {
if (scale < 0 || scale > 12) {
throw new IllegalArgumentException("Scale must be between 0 and 12.");
}
this.s = scale;
calculateTriangle();
}
public double getCircleRadius() {
return this.r;
}
public void setCircleRadius(double radius) {
this.r = radius;
calculateTriangle();
}
private void calculateTriangle() {
double u = -((r)/(s + 1)) + r;
double x = (6 * u + 10 * r - Math.sqrt(36 * Math.pow(r, 2) + 24 * r * u - 12 * Math.pow(u, 2)))/(8);
double ax = x;
double ay = -Math.tan(Math.toRadians(30)) * (x - 2 * r + u) + r;
double bx = -u + 2 * r;
double by = r;
double cx = x;
double cy = Math.tan(Math.toRadians(30)) * (x - 2 * r + u) + r;
Point a = new Point(ax, ay);
Point b = new Point(bx, by);
Point c = new Point(cx, cy);
if (this.inscribedTriangle == null) {
this.inscribedTriangle = new Triangle(a, b, c);
} else {
this.inscribedTriangle.setA(a);
this.inscribedTriangle.setB(b);
this.inscribedTriangle.setC(c);
}
}
}
那么你的自定义视图
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int width = getWidth();
int height = getHeight();
int radius = width/2;
canvas.drawCircle(width/2, height/2, radius, mTextFieldEmpty ? mCircleDisabledPaint : mCirclePaint);
canvas.drawPath(mTrianglePath, mTextFieldEmpty ? mTriangleDisabledPaint : mTrianglePaint);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
mTriangle = new TriangleInscribedCircle(w/2, 1);
calculatePath();
}
private void calculatePath() {
mTrianglePath.reset();
mTrianglePath.moveTo((int) mTriangle.getInscribedTriangle().getA().x, (int) mTriangle.getInscribedTriangle().getA().y);
mTrianglePath.lineTo((int) mTriangle.getInscribedTriangle().getB().x, (int) mTriangle.getInscribedTriangle().getB().y);
mTrianglePath.lineTo((int) mTriangle.getInscribedTriangle().getC().x, (int) mTriangle.getInscribedTriangle().getC().y);
mTrianglePath.lineTo((int) mTriangle.getInscribedTriangle().getA().x, (int) mTriangle.getInscribedTriangle().getA().y);
}
什么是TangleInscribedCircle类中的三角形?它显示为红色 – thechosenone
它只是一个持有人类3点,A,B,C。 Point是X和Y的持有者。 – Linxy
为什么不使用的图像可在网上里面? (除非你真的想从头开始编码,包括按钮) – ItamarG3
为什么不在Inkscape中绘制SVG? –
这里是创建一个“完美”n-gon的代码:https://sourceforge.net/p/tus/code/HEAD/tree/tjacobs/ui/shape/PolygonFactory.java – ControlAltDel