2013-04-10 101 views
0

好吧,我正在試圖製作一個利用linedrawview的程序。當用戶啓動觸摸事件(動作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

好吧,我發現:確保設置起始位置的x和y,如下所示:

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

exampleStartX = currentXExample; exampleStartY = currentYExample; 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); 
    } 
}