java - 如何在Android中用一条线连接两个按钮?
问题描述
我想用画布中的一条线连接两个相反的单选按钮或普通按钮,如下所示:图像
我有 FingerLine 类来绘制红线,在布局中我有 3 列(RecyclerView、FingerLine、RecyclerView)。我想开发一个应用程序来匹配两个带有线条的图像。
目前我所做的是在中间绘制,但我希望绘图线从一个按钮转到另一个按钮,我不知道该怎么做。
public class FingerLine extends View {
private final Paint mPaint;
private float startX;
private float startY;
private float endX;
private float endY;
float joinX, joinY = 0;
ArrayList<Line> lines = new ArrayList<Line>();
class Line {
float startX, startY, stopX, stopY;
public Line(float startX, float startY, float stopX, float stopY) {
this.startX = startX;
this.startY = startY;
this.stopX = stopX;
this.stopY = stopY;
}
public Line(float startX, float startY) { // for convenience
this(startX, startY, startX, startY);
}
}
public FingerLine(Context context) {
this(context, null);
}
public FingerLine(Context context, AttributeSet attrs) {
super(context, attrs);
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint.setStyle(Style.STROKE);
mPaint.setColor(Color.RED);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
for (Line l : lines) {
canvas.drawLine(l.startX, l.startY, l.stopX, l.stopY, mPaint);
}
}
@Override
public boolean onTouchEvent(@NonNull MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (joinX <= 0 || joinY <= 0) {
lines.add(new Line(event.getX(), event.getY()));
}else{
lines.add(new Line(event.getX(), event.getY()));
}
break;
case MotionEvent.ACTION_MOVE:
if(lines.size() > 0) {
Line current = lines.get(lines.size() - 1);
current.stopX = event.getX();
current.stopY = event.getY();
invalidate();
break;
}
case (MotionEvent.ACTION_CANCEL):
break;
case (MotionEvent.ACTION_OUTSIDE):
break;
case MotionEvent.ACTION_UP:
if(lines.size() > 0) {
Line current = lines.get(lines.size() - 1);
current.stopX = event.getX();
current.stopY = event.getY();
joinX = event.getX();
joinY = event.getY();
invalidate();
break;
}
}
return true;
}
}
解决方案
我认为首先你必须找到一条线的图像。imageview
然后你必须用线条的图像创建 6 个(或你想要多少个) s,然后用android:visibility = "invisible"
. radiobutton
那么你必须在你的activity.java中找到两个checked s,然后为你的inactivity.java设置align_right
和align_left
checked radiobutton
s imageview
,然后让它可见。
推荐阅读
- microsoft-graph-api - 如何从 MS Graph API 获取管理器详细信息(使用 getSchedule API)
- highcharts - Highcharts - 慢速随机指标错误
- java - Liferay 7 扩展 EditableFragmentEntryProcessor
- makefile - /lib/x86_64-linux-gnu/libm.so.6: 未定义引用`__strtof128_nan@GLIBC_PRIVATE'
- docker - Nodemon 未在 Docker 中刷新其内容
- visual-studio-code - 基于 Debian 的 vscode 不检测新字体
- javascript - Next JS Audio 构造函数未定义
- mysql - 错误代码 1824 - 无法打开引用表 + 我的语法中的其他问题
- java - 事务隔离级别如何使用多个@Transactional 更改整个事务
- python - 如何删除 /var/log/syslog 中的颜色代码?