2015-06-05 12 views
6

Bu, Android Canvas'da geri alma ve yineleme uygulama kodudur ve iyi çalışıyor. Geri alma ve yineleme ile çalışmayan renk seçici

package com.example.canva; 

import java.util.ArrayList; 
import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.Path; 
import android.view.MotionEvent; 
import android.view.View; 


public class MainView extends View { 
private Canvas mCanvas; 
private Path mPath; 

private Paint  mPaint; 
private ArrayList<Path> paths = new ArrayList<Path>(); 
private ArrayList<Path> undonePaths = new ArrayList<Path>(); 

public MainView(Context context) 
{ 
    super(context); 
    setFocusable(true); 
    setFocusableInTouchMode(true);  
    mPaint = new Paint(); 
    mPaint.setAntiAlias(true); 
    mPaint.setDither(true); 
    mPaint.setColor(0xFFFFFFFF); 
    mPaint.setStyle(Paint.Style.STROKE); 
    mPaint.setStrokeJoin(Paint.Join.ROUND); 
    mPaint.setStrokeCap(Paint.Cap.ROUND); 
    mPaint.setStrokeWidth(6); 
    mCanvas = new Canvas(); 
    mPath = new Path(); 

} 
    // im=BitmapFactory.decodeResource(context.getResources(),R.drawable.ic_launcher); 


    @Override 
    protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
     super.onSizeChanged(w, h, oldw, oldh); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     //mPath = new Path(); 
     //canvas.drawPath(mPath, mPaint); 
     for (Path p : paths){ 
      canvas.drawPath(p, mPaint); 
     } 
     canvas.drawPath(mPath, mPaint); 


    } 

    private float mX, mY; 
    private static final float TOUCH_TOLERANCE = 4; 

    private void touch_start(float x, float y) { 
     undonePaths.clear(); 
     mPath.reset(); 
     mPath.moveTo(x, y); 
     mX = x; 
     mY = y; 
    } 
    private void touch_move(float x, float y) { 
     float dx = Math.abs(x - mX); 
     float dy = Math.abs(y - mY); 
     if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) { 
      mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2); 
      mX = x; 
      mY = y; 
     } 
    } 
    private void touch_up() { 
     mPath.lineTo(mX, mY); 
     // commit the path to our offscreen 
     mCanvas.drawPath(mPath, mPaint); 
     // kill this so we don't double draw 
     paths.add(mPath); 
     mPath = new Path();    

    } 

    public void onClickUndo() { 
     if (paths.size()>0) 
     { 
      undonePaths.add(paths.remove(paths.size()-1)); 
      invalidate(); 
     } 
     else 
     { 

     } 
     //toast the user 
    } 

    public void onClickRedo(){ 
     if (undonePaths.size()>0) 
     { 
      paths.add(undonePaths.remove(undonePaths.size()-1)); 
      invalidate(); 
     } 
     else 
     { 

     } 
     //toast the user 
    } 

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

     switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       touch_start(x, y); 
       invalidate(); 
       break; 
      case MotionEvent.ACTION_MOVE: 
       touch_move(x, y); 
       invalidate(); 
       break; 
      case MotionEvent.ACTION_UP: 
       touch_up(); 
       invalidate(); 
       break; 
     } 
     return true; 
    } 
    } 

Ama aşağıdaki yöntemi kullanarak Renk değiştirmeye çalıştığınızda Uygulamamda Rengini, çizgi genişliğini, stil vb değiştirmeniz gerekir, Tuval bütün şey Renk değişiyor.

public void setColor(int color){ 
    mPaint.setColor(color);} 
+1

Bunun için bir yol belirlemelisiniz. Bu açık kaynak kodlu android uygulamayı kontrol edin https://github.com/Catrobat/Paintroid Açık kaynak kodlu, gereksiniminiz için gereksinim duyduğunuz kodu kapatın. Şerefe! – Chandru

cevap

1

Dizideki yolları kaydedin ve geri almak veya yeniden yapmak için bu dizideki işlemleri gerçekleştirin.

İlgili konular