当前位置: 首页 > 知识库问答 >
问题:

如何在Android中通过拖动绘制线条

陈扬
2023-03-14

如果我把筹码拖离初始位置,它应该画一条线。当我移动筹码时,它应该总是画一条线。

这就是我所尝试的:

case MotionEvent.ACTION_UP:
            Toast.makeText(this, "here", Toast.LENGTH_SHORT).show();
            Bitmap bitmap = Bitmap.createBitmap((int) getWindowManager()
                    .getDefaultDisplay().getWidth(), (int) getWindowManager()
                    .getDefaultDisplay().getHeight(), Bitmap.Config.ARGB_8888);
            Canvas canvas = new Canvas(bitmap);
            Paint paint = new Paint();
            paint.setColor(Color.BLACK);
            paint.setStrokeWidth(10);
            int startx = 50;
            int starty = 100;
            int endx = 150;
            int endy = 210;
            canvas.drawLine(startx, starty, endx, endy, paint);
            break;

我将该代码放在芯片的ontouch listener中。您可以在此处下载该项目:https://www.dropbox.com/s/ggfbsbkaokj9vxi/CoachingBoard.rar?dl=0

共有2个答案

海鸣
2023-03-14

通过拖动绘制直线的最佳解决方案是从ACTION\u向下获取x和y位置,然后从ACTION\u MOVE获取下一个x和y位置,在switch语句之外,使画布无效。使用此起始x、y和结束x、y位置绘制线。

这些代码的所有解释如下:

public class TouchEventView extends View {
float downxpos;
float downypos;
float upxpos;
float upypos;
private Paint paint = new Paint();
private Path path = new Path()
public TouchEventView(Context context, AttributeSet attrs) {
    super(context, attrs);
    paint.setColor(Color.GREEN);       
}

@Override
protected void onDraw(Canvas canvas) {
        canvas.drawLine(downxpos, downypos, upxpos, upypos, paint);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            downxpos = event.getX();
            downypos = event.getY();
        case MotionEvent.ACTION_MOVE:
            upxpos = event.getX();
            upypos = event.getY();
            break;
        default:
            return false;
    }
    invalidate();
    return true;
}

}

希望这将帮助你和其他社区,如果你需要更多的描述,请随时询问。

艾茂学
2023-03-14

在进一步检查了您的代码之后,我相信我已经达到了您想要的效果。

我们将转到DrawingView,为drawCanvas定义一个getter,这样我们就可以在DrawingView类之外访问画布。

接下来,我们将前往篮球,并执行以下操作:

float startX;
float startY;
public boolean onTouch(View view, MotionEvent event) {
    switch(event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            startX = event.getRawX();
            startY = event.getRawY();
            ...
            break;

        case MotionEvent.ACTION_UP:
            Paint paint = new Paint(); //set this as a field in drawView with another getter to avoid garbage collection penalties
            paint.setStrokeWidth(15f);
            paint.setColor(Color.BLACK);
            drawView.getCanvas().drawLine(startX, startY, event.getRawX(), event.getRawY(), paint);
            drawView.invalidate();
            break;
    }
}

这样做的作用:当你拿起芯片时,它会保存起始坐标,当你放下芯片时,它会在你的绘图视图中从头到尾画一条线。

你甚至可以把线画成一条连续的路径,这样线总是相互接触的,但这超出了这个答案的范围。

 类似资料:
  • 我已经使用MP Android chart创建了一个折线图,并希望创建一条可拖动的线来设置限制。因此,如果该值超过行值,则用户会收到警报。我的用例类似于Android系统数据使用限制。 我遇到了LimitLines-https://github.com/PhilJay/MPAndroidChart/wiki/The-Axis,还使用触摸事件回调拖动https://github.com/PhilJa

  • 问题内容: 我想按画布画圆。这是我的代码: [MyActivity.java]: [View.java]: 所以我只有黑屏,没有圆圈。为什么不起作用?如何解决? 问题答案: 您可以覆盖视图的onDraw方法并绘制圆。 有关绘制自定义视图的更好参考,请查看官方的Android文档。 http://developer.android.com/training/custom-views/custom-

  • 问题内容: 我试图通过拖放在由PyQt5创建的GUI上绘制一个矩形。我设法做到了,但是释放鼠标左键时就绘制了矩形。 我想做的就是这个链接: 当按下鼠标左键时,开始绘制矩形。 拖动时,通过鼠标移动调整矩形形状。 释放鼠标左键时,确定矩形形状。 我该如何实施?提前致谢。 这是我的代码。 问题答案: 您不必使用该函数,但是每次移动鼠标时都会调用该函数,并且我已经修改了代码以使其更简单。

  • 本文向大家介绍Android绘制动态折线图,包括了Android绘制动态折线图的使用技巧和注意事项,需要的朋友参考一下 所谓动态折线图,就是折线图能随着手指的滑动进行动态绘制,这里很定会产生动画效果。基于这个效果,这里使用SurfaceView进行制图。 实现步奏如下: (1): 这里新建一个绘图ChartView,继承SurfaceView并实现SurfaceHolder.Callback ,

  • 我画了4条线从中心到按钮,我给你看的照片。我不知道如何在图片中画出红色的曲线。 [在此处输入图像说明] 或 [在此输入图像说明(更简单)]

  • 图形界面允许您使用不同的类创建图形。 在下面的代码中,我使用3个不同的类创建形状: 产生屏幕图像: 不幸的是,接口不提供任何用于转换的功能。 例如,要将形状移动到新位置,我使用以下方法: 我不喜欢逻辑的实例。 是否有一种更通用的方法可以在不使用instanceof逻辑的面板周围拖动任何形状? 完整示例: