使用 ontouchevent 绘制橡皮筋线 [英] Draw rubber band line with an ontouchevent

查看:35
本文介绍了使用 ontouchevent 绘制橡皮筋线的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

好的,我正在尝试制作一个使用 linedrawview 的程序.当用户启动一个触摸事件(动作 DOWN)时,它会获取当前的 x 和 y 并将它们存储在变量中.然后当用户拖动他们的手指时,会画一条线并以橡皮筋的方式动画.最后,当用户放手(动作 UP)时,就创建了该行.我在这方面遇到了很多麻烦,需要一些帮助.到目前为止,我的 LineDrawView.java 代码:

Ok, I'm trying to make a program that utilizes a linedrawview. When the user starts a touch event(action DOWN), it gets the current x and y and stores them in variables. Then when the user drags their finger around, a line is drawn and animates in a rubber band way. Finally, when the user lets go (action UP), the line is created. I'm having a lot of trouble with this and would like some assistance. My code so far for LineDrawView.java:

    // Project:         Java2LineDrawEx
    // File:            LineDrawView.java
    // Date:            4/9/13
    // Author:          Joshua Lefelhocz
    // Description:     custom view to draw lines on

    package com.lcc.java2lab11lefelhocz;

    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.view.MotionEvent;
    import android.view.View;

    // Notice this class extends View
    public class LineDrawView extends View 
    {
// This view's bounds

private int xMin = 0;          
private int xMax;
private int yMin = 0;
private int yMax;
private float currentX;
private float currentY;

// Paint object
private Paint paintFill;

// constructor
public LineDrawView(Context context) 
{
    // call the super class constructor
    super(context);

    // The Paint class holds the style and color information about how to draw geometries, text and bitmaps.
    // For efficiency create the paint objects in the constructor, not in draw
    // paint.setStrokeWidth(10); // works on lines
    // You can change the color of Paint without effecting objects already drawn
    // You can NOT change the style of Paint without effecting objects already drawn
    // The Style, TextSize apply to all objects drawn with the paint.

    // Create a default Paint object Style=Fill
    paintFill = new Paint();

    // set the background color when the view is created
    this.setBackgroundColor(Color.LTGRAY);  
}

// Called to draw the view. Also called by invalidate().
@Override
protected void onDraw(Canvas canvas) 
{
    //      canvas.drawColor(Color.LTGRAY); // this works in onDraw to set the background color

    // Draw a Red Diagonal line from upper left corner to bottom right corner
    paintFill.setColor(Color.RED); 
    canvas.drawLine(xMin, yMin, xMax, yMax, paintFill);

    // draw a blue line 10 pixels wide horizontal across the center.
    paintFill.setColor(Color.BLUE);
    paintFill.setStrokeWidth(10);
    canvas.drawLine(xMin, yMax/2, xMax, yMax/2, paintFill);

    // draw a yellow line 20 pixels wide vertical across the center.
    paintFill.setColor(Color.YELLOW);
    paintFill.setStrokeWidth(20);
    canvas.drawLine(xMax/2, yMin, xMax/2, yMax, paintFill);
}

// Called when the view is first created or its size changes.
@Override
public void onSizeChanged(int width, int height, int oldWidth, int oldHeight) 
{
    // Set the view bounds
    xMax = width-1;
    yMax = height-1;
}

public boolean onTouchEvent(MotionEvent event)
{
    currentX = event.getX();
    currentY = event.getY();



    switch(event.getAction())
    {
    case MotionEvent.ACTION_DOWN:
        float startX = currentX; 
        float startY = currentY;


    case MotionEvent.ACTION_MOVE:
        float endX = 

    case MotionEvent.ACTION_UP:


        return super.onTouchEvent(event);
    }
    return super.onTouchEvent(event);
}
    }

推荐答案

好的,我发现:确保设置开始位置 x 和 y,如下所示:

Okay, I found out: Make sure to set the start position x and y, like this:

currentXExample = event.getX();currentYExample = event.getY();

currentXExample = event.getX(); currentYExample = event.getY();

exampleStartX = currentXExample;exampleStartY = currentYExample;

exampleStartX = currentXExample; exampleStartY = currentYExample;

exampleEndX = currentXExample;

exampleEndX = currentXExample;

exampleEndY = currentYExample;

exampleEndY = currentYExample;

您可以将其排除在 Up 事件之外,但切勿将其排除在 MOVE 事件之外,否则它将无法工作.

You can leave it out of the Up event, but never leave it out of the MOVE event or it will not work.

LineDrawView.java

LineDrawView.java

// Project:         Java2Lab
// File:            LineDrawView.java
// Date:            4/9/13
// Author:          Joshua Lefelhocz
// Description:     custom view to draw lines on

package com.lcc.java2lab11lefelhocz;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.MotionEvent;
import android.view.View;

// Notice this class extends View
 public class LineDrawView extends View 
{
      // This view's bounds

private int xMin = 0;          
private int xMax;
private int yMin = 0;
private int yMax;
private float currentX;
private float currentY;
private float startX;
private float endX;
private float startY;
private float endY;
// Paint object
private Paint paintFill;

// constructor
public LineDrawView(Context context) 
{
    // call the super class constructor
    super(context);

    // The Paint class holds the style and color information about how to draw geometries, text and bitmaps.
    // For efficiency create the paint objects in the constructor, not in draw
    // paint.setStrokeWidth(10); // works on lines
    // You can change the color of Paint without effecting objects already drawn
    // You can NOT change the style of Paint without effecting objects already drawn
    // The Style, TextSize apply to all objects drawn with the paint.

    // Create a default Paint object Style=Fill
    paintFill = new Paint();

    // set the background color when the view is created
    this.setBackgroundColor(Color.LTGRAY);  
}

// Called to draw the view. Also called by invalidate().
@Override
protected void onDraw(Canvas canvas) 
{
   //canvas.drawColor(Color.LTGRAY); // this works in onDraw to set the background color

    // Draw a Red Diagonal line from upper left corner to bottom right corner

    paintFill.setColor(Color.BLACK);
    canvas.drawLine(startX, startY, endX, endY, paintFill);

}

// Called when the view is first created or its size changes.
@Override
public void onSizeChanged(int width, int height, int oldWidth, int oldHeight) 
{
    // Set the view bounds
    xMax = width-1;
    yMax = height-1;
}

public boolean onTouchEvent(MotionEvent event)
{
    currentX = event.getX();
    currentY = event.getY();



    switch(event.getAction())
    {   
    case MotionEvent.ACTION_DOWN:
        startX = currentX;
        startY = currentY;
        return true;
    case MotionEvent.ACTION_MOVE:
    endX = currentX;
    endY = currentY;
    invalidate();
        return true;
    case MotionEvent.ACTION_UP:


        return true;
    }
    return super.onTouchEvent(event);
     }
}

这篇关于使用 ontouchevent 绘制橡皮筋线的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆