用ontouchevent绘制橡皮筋线

时间:2013-04-10 23:06:31

标签: android ontouchevent rubber-band line-drawing

好的,我正在尝试制作一个利用有线视图的程序。当用户启动触摸事件(动作DOWN)时,它获取当前的x和y并将它们存储在变量中。然后当用户拖动他们的手指时,绘制一条线并以橡皮筋方式动画。最后,当用户放开(动作UP)时,将创建该行。我在这方面遇到了很多麻烦,希望得到一些帮助。到目前为止我的代码是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);
}
    }

1 个答案:

答案 0 :(得分:0)

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

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

exampleStartX = currentXExample; exampleStartY = currentYExample;

exampleEndX = currentXExample;

exampleEndY = currentYExample;

您可以将其从Up事件中删除,但永远不要将其从MOVE事件中删除,否则它将无效。

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);
     }
}