2013-04-10 6 views
0

Хорошо, я пытаюсь создать программу, которая использует linedrawview. Когда пользователь начинает событие touch (действие DOWN), он получает текущие x и y и сохраняет их в переменных. Затем, когда пользователь тянет их пальцем, линия рисуется и оживляется резинкой. Наконец, когда пользователь отпускает (действие UP), линия создается. У меня с этим много хлопот и мне нужна помощь. Мой код до сих пор для LineDrawView.java:Нарисуйте линию резиновой ленты с помощью ontouchevent

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

ответ

0

Хорошо, я обнаружил: Убедитесь, чтобы установить начальную позицию х и у, как это:

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

примерStartX = текущийX пример; exampleStartY = currentYExample;

примерEndX = текущийX пример;

примерEndY = 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); 
    } 
}