2013-10-17 72 views
0

我有一個問題。當我用雙擊進行繪畫時更改筆畫寬度時,筆畫寬度已經繪畫也發生變化。我想要改變筆畫寬度而不改變最後的筆畫。如何更改筆畫寬度android?

這裏我的代碼:

package com.example.paint; 

    import android.content.Context; 
    import android.graphics.Canvas; 
    import android.graphics.Color; 
    import android.graphics.Paint; 
    import android.graphics.Path; 
    import android.support.v4.view.GestureDetectorCompat; 
    import android.util.AttributeSet; 
    import android.util.Log; 
    import android.view.GestureDetector; 
    import android.view.MotionEvent; 
    import android.view.View; 
    import android.widget.Toast; 

    public class SingleTouchEventView extends View implements GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener { 

    private Paint paint = new Paint(); 
    private Path path = new Path(); 

    private static final String DEBUG_TAG = "Gestures"; 
    private GestureDetectorCompat mDetector; 

    public SingleTouchEventView(Context context, AttributeSet attrs) { 
    super(context, attrs); 

    paint.setAntiAlias(true); 
    paint.setStrokeWidth(6f); 
    paint.setColor(Color.BLACK); 
    paint.setStyle(Paint.Style.STROKE); 
    paint.setStrokeJoin(Paint.Join.BEVEL); 

    mDetector = new GestureDetectorCompat(context, this); 

    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
    canvas.drawPath(path, paint); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
    float eventX = event.getX(); 
    float eventY = event.getY(); 

    this.mDetector.onTouchEvent(event); 
    // Be sure to call the superclass implementation 

    switch (event.getAction()) { 
    case MotionEvent.ACTION_DOWN: 
     path.moveTo(eventX, eventY); 
     return true; 
    case MotionEvent.ACTION_MOVE: 
     path.lineTo(eventX, eventY); 
     break; 
    case MotionEvent.ACTION_UP: 
     // nothing to do 
     break; 
    default: 
     return false; 
    } 

    // Schedules a repaint. 
    invalidate(); 
    return true; 

    } 

    @Override 
    public boolean onDown(MotionEvent event) { 
     Log.d(DEBUG_TAG,"onDown: " + event.toString()); 
     return false; 
    } 

    @Override 
    public boolean onFling(MotionEvent event1, MotionEvent event2, 
      float velocityX, float velocityY) { 
     Log.d(DEBUG_TAG, "onFling: " + event1.toString()+event2.toString()); 
     return false; 
    } 

    @Override 
    public void onLongPress(MotionEvent event) { 
     Log.d(DEBUG_TAG, "onLongPress: " + event.toString()); 
    } 

    @Override 
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, 
      float distanceY) { 
     Log.d(DEBUG_TAG, "onScroll: " + e1.toString()+e2.toString()); 
     return false; 
    } 

    @Override 
    public void onShowPress(MotionEvent event) { 
     Log.d(DEBUG_TAG, "onShowPress: " + event.toString()); 
    } 

    @Override 
    public boolean onSingleTapUp(MotionEvent event) { 
     Log.d(DEBUG_TAG, "onSingleTapUp: " + event.toString()); 
     return false; 
    } 

    @Override 
    public boolean onDoubleTap(MotionEvent event) { 

     float width = paint.getStrokeWidth(); 
     width++; 
     paint.setStrokeWidth(width); 
     Log.d(DEBUG_TAG, "onDoubleTap: " + event.toString()); 
     return true; 
    } 

    @Override 
    public boolean onDoubleTapEvent(MotionEvent event) { 
     Log.d(DEBUG_TAG, "onDoubleTapEvent: " + event.toString()); 
     return false; 
    } 

    @Override 
    public boolean onSingleTapConfirmed(MotionEvent event) { 
     Log.d(DEBUG_TAG, "onSingleTapConfirmed: " + event.toString()); 
     return false; 
    } 
    } 

這我的活動

package com.example.paint; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.Menu; 
public class MainActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(new SingleTouchEventView(this, null)); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
    } 
} 

回答

0

目前,你只存儲單個Path

您需要存儲多個Path s及其關聯的寬度,以便您可以更改每個不同路徑的onDraw中的油漆寬度。

+0

你可以舉個例子。我嘗試用arraylist存儲,但仍然無法工作 –

+0

在'onDoubleTap'中,您需要將當前路徑和當前strokeWidth一起添加到列表中,並啓動一個新路徑。然後,在onDraw中,遍歷列表,繪製舊的段,然後繪製'this.path'。 – Delyan