【问题标题】:How can user paint or draw line on shape by touch用户如何通过触摸在形状上绘画或画线
【发布时间】:2017-08-01 17:28:40
【问题描述】:

我想创建一个应用程序,该应用程序可以显示类似人手的图片,并且用户可以在其上画一条线。例如,您想在给定的图片上画手或画手的线条。

我在没有layout 文件的情况下创建了手的形状,如下面的代码所示。

我不知道用户如何通过触摸在该形状上绘图或绘画。

谁能帮我实现这个!!?

在此先感谢您。

这是我的代码:

 public class YeknafareActivity_layout extends View {

    Paint black_paintbrushstroke;
    Path Hand;


    public YeknafareActivity_layout(Context context) {
        super(context);

    }


    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);


        black_paintbrushstroke = new Paint();
        black_paintbrushstroke.setColor(Color.BLACK);
        black_paintbrushstroke.setStyle(Paint.Style.STROKE);
        black_paintbrushstroke.setStrokeWidth(4);


        Hand = new Path();
        Hand.moveTo(225, 844);  // A
        Hand.lineTo(191, 675);

        Hand.moveTo(191, 675);  // B
        Hand.lineTo(114, 412);

        Hand.moveTo(114, 412); // C
        Hand.lineTo(147, 409);

        Hand.moveTo(147, 409); // D
        Hand.lineTo(235, 591);

        Hand.moveTo(235, 591); // E
        Hand.lineTo(179, 279);

        Hand.moveTo(179, 279); // F
        Hand.lineTo(222, 279);

        Hand.moveTo(222, 279); // G
        Hand.lineTo(300, 534);

        Hand.moveTo(300, 534); // H
        Hand.lineTo(308, 186);

        Hand.moveTo(308, 186); // I
        Hand.lineTo(341, 187);

        Hand.moveTo(341, 187); // J
        Hand.lineTo(382, 513);

        Hand.moveTo(382, 513); // K
        Hand.lineTo(427, 212);

        Hand.moveTo(427, 212); // L
        Hand.lineTo(460, 216);

        Hand.moveTo(460, 216); // M
        Hand.lineTo(462, 536);

        Hand.moveTo(462, 536); // O
        Hand.lineTo(476, 613);

        Hand.moveTo(476, 613); // P
        Hand.lineTo(507, 662);

        Hand.moveTo(507, 662); // Q
        Hand.lineTo(593, 501);

        Hand.moveTo(593, 501); // R
        Hand.lineTo(628, 492);

        Hand.moveTo(628, 492); // S
        Hand.lineTo(645, 511);

        Hand.moveTo(645, 511); // T
        Hand.lineTo(470, 960);

        Hand.moveTo(470, 960); // U
        Hand.lineTo(386, 989);

        Hand.moveTo(386, 989); // V
        Hand.lineTo(280, 947);

        Hand.lineTo(225, 844);


        canvas.drawPath(Hand, black_paintbrushstroke);

【问题讨论】:

    标签: android draw paint ontouch


    【解决方案1】:

    您应该在自定义视图中覆盖 onTouchEvent 方法以响应用户的触摸事件。

    Path path = new Path();
    
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_MOVE){
            path.lineTo(event.getX(), event.getY());
            invalidate();
        }
    }
    

    【讨论】:

    • 感谢您的帮助,但没有成功!现在用户仍然无法画线。
    • 有谁能解决我的问题吗?我会很感激的。
    【解决方案2】:

    最后,我自己找到了答案,解决方法如下:

    在声明了Path & Paint之后,你可以使用下面的代码,这样你就可以在屏幕上绘制任何东西了:

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        float xpos = event.getX();
        float ypos = event.getY();
    
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                path.moveTo(xpos, ypos);
                return true;
            case MotionEvent.ACTION_MOVE:
                path.lineTo(xpos, ypos);
                break;
            case MotionEvent.ACTION_UP:
                break;
            default:
                return false;
        }
        invalidate();
        return true;
    }
    

    它对我有用:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-19
      相关资源
      最近更新 更多