首页 > 解决方案 > 如何在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;
    }
}

标签: javaandroid

解决方案


我认为首先你必须找到一条线的图像。imageview然后你必须用线条的图像创建 6 个(或你想要多少个) s,然后用android:visibility = "invisible". radiobutton那么你必须在你的activity.java中找到两个checked s,然后为你的inactivity.java设置align_rightalign_leftchecked radiobuttons imageview,然后让它可见。


推荐阅读