2015-06-05 11 views
6

के साथ काम नहीं कर रहा है यह एंड्रॉइड कैनवास में पूर्ववत और फिर से कार्यान्वित करने के लिए कोड है और ठीक काम कर रहा है।कलर पिकर पूर्ववत और फिर से

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

लेकिन मेरे एप्लिकेशन में मैं जब मैं निम्न विधि का उपयोग कर रंग बदलने की कोशिश रंग, स्ट्रोक चौड़ाई, शैली आदि बदलने की जरूरत है, कैनवास में पूरी बात यह है कि रंग को बदल रहा है।

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

आपको इसके लिए एक पथ निर्धारित करना होगा। इस पूर्ण ओपन सोर्स एंड्रॉइड ऐप की जांच करें https://github.com/Catrobat/Paintroid यह ओपन सोर्स है, आपको अपनी आवश्यकता के लिए आवश्यक कोड को बंद करें। चीयर्स! – Chandru

उत्तर

1

सरणी में पथ सहेजें और उस सरणी पर पूर्ववत या फिर से करने के लिए संचालन करें।

संबंधित मुद्दे