2016-06-13 8 views
0

Was ich versuche ImageEditor einfach zu erreichen ist, habe ich mit dem Erstellen von einfachem Werkzeug gestartet, die die CropTool wie folgt lautet:auf Image Zeichnung ist zu langsam

public class CropTool implements ITool { 
    RectF top, right, bottom, left, crop; 
    Paint fillPaint, cropPaint; 

    public CropTool() { 
     crop = new RectF(); 
     top = new RectF(); 
     right = new RectF(); 
     left = new RectF(); 
     bottom = new RectF(); 

     fillPaint = new Paint(); 
     fillPaint.setStyle(Paint.Style.FILL); 
     fillPaint.setARGB(150, 0, 0, 0); 

     cropPaint = new Paint(); 
     cropPaint.setStyle(Paint.Style.STROKE); 
     cropPaint.setARGB(255, 255, 99, 71); 
    } 

    @Override 
    public void TouchStart(ImageView context, float x, float y) { 
     crop.set(x, y, crop.right, crop.bottom); 
    } 

    @Override 
    public void TouchMove(ImageView context, float x, float y) { 
     crop.set(crop.left, crop.top, x, y); 
    } 

    @Override 
    public void TouchUp(ImageView context, float x, float y) { 
     crop.set(crop.left, crop.top, x, y); 
    } 

    @Override 
    public void OnDraw(ImageView context, Canvas canvas) { 
     if (crop.isEmpty()) 
      canvas.drawRect(0, 0, context.getWidth(), context.getHeight(), fillPaint); 
     else { 
      top.set(0, 0, context.getWidth(), crop.top); 
      bottom.set(0, crop.bottom, context.getWidth(), context.getBottom()); 
      left.set(0, crop.top, crop.left, crop.bottom); 
      right.set(crop.right, crop.top, context.getRight(), crop.bottom); 

      canvas.drawRect(top, fillPaint); 
      canvas.drawRect(bottom, fillPaint); 
      canvas.drawRect(left, fillPaint); 
      canvas.drawRect(right, fillPaint); 

      canvas.drawRect(crop, cropPaint); 
     } 
    } 
} 

und die benutzerdefinierten ImageView:

public class ImageEditView extends ImageView { 
    private ITool currentTool; 

    public ImageEditView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     currentTool = new CropTool(); 
    } 


    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       if (currentTool != null) currentTool.TouchStart(this, event.getX(), event.getY()); 
       break; 
      case MotionEvent.ACTION_MOVE: 
       if (currentTool != null) currentTool.TouchMove(this, event.getX(), event.getY()); 
       break; 
      case MotionEvent.ACTION_UP: 
       if (currentTool != null) currentTool.TouchUp(this, event.getX(), event.getY()); 
       break; 
     } 
     invalidate(); 
     return true; 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     if (currentTool != null) currentTool.OnDraw(this, canvas); 
    } 
} 

Das Problem ist, die Zeichnung ist zu langsam, dass es dauert 20 Sekunden, um das Ernte Rechteck zu zeigen, wie kann ich das optimieren, oder was mache ich hier falsch, und ist mein Ansatz richtig oder es gibt einen besseren Weg?

+1

Es funktioniert gut auf realen Gerät – rainash

Antwort

0

Emulatoren sind schmerzhaft langsam im Wettbewerb mit Ihrem PC für Ressourcen (sogar auf Xeon)! Probieren Sie es auf einem Hardwaregerät - Telefon oder Tablet. Sollte gut funktionieren.