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?
Es funktioniert gut auf realen Gerät – rainash