Android - How to draw on view
Ich bin tring zu malen, auf meine eigene Ansicht (R. id.Sicht), aber der code scheint nicht zu haben keine Wirkung. Es ist nicht erlaubt mir, zu zeichnen, überhaupt nichts.
public class MainActivity extends Activity implements OnTouchListener
{
Path mPath;
Canvas canvas;
Paint mPaint;
MaskFilter mEmboss;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
View view=(View)findViewById(R.id.view1);
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setDither(true);
mPaint.setColor(0xFFFF0000);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeJoin(Paint.Join.ROUND);
mPaint.setStrokeCap(Paint.Cap.ROUND);
mPaint.setStrokeWidth(12);
canvas = null;
//view.draw(canvas);
mPath = new Path();
Bitmap mBitmap;
//Paint mBitmapPaint = new Paint(Paint.DITHER_FLAG);
mBitmap = Bitmap.createBitmap(210, 170, Bitmap.Config.ARGB_8888);
canvas = new Canvas(mBitmap);
canvas.drawColor(0xFFAAAAAA);
canvas.drawBitmap(mBitmap, 0, 0, mPaint);
//canvas.drawPaint(mPaint);
view.draw(canvas);
canvas.drawPath(mPath, mPaint);
mEmboss = new EmbossMaskFilter(new float[] { 1, 1, 1 },
0.4f, 6, 3.5f);
view.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
float x = event.getX();
float y = event.getY();
Log.d("x", String.valueOf(x));
Log.d("y", String.valueOf(y));
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
Log.d("a","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;
}
});
//mBlur = new BlurMaskFilter(8, BlurMaskFilter.Blur.NORMAL);
}
private float mX, mY;
private static final float TOUCH_TOLERANCE = 4;
private void touch_start(float x, float y) {
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
canvas.drawPath(mPath, mPaint);
//kill this so we don't double draw
mPath.reset();
}
}
Was muss ich tun, um die Nutzung der freehanf finger Farbe auf meine eigene Meinung?
- Siehe meine Antwort in hier Klicken
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wäre es am besten, wenn Sie eine Klasse, die erweiterte Sicht, und auf der Inhalts-Ansicht, mehr Dynamik, Weg. auch die Action_Move parameter aufgerufen wird, wird eine Menge während der touch-events, so könnte es am besten zu beachten, andernfalls erhalten Sie eine gerade Linie, wenn Sie wollten eine Kurve.
Bearbeiten:
Sie würde beginnen, in der onCreate durch ändern
View view = new MyView();
setContentView(view);
Innerhalb Ihrer MyView-Klasse hätte man eine arrayList "Pfad" - Objekte, jedes mal wenn Action_UP aufgerufen wird, fügen Sie den Pfad zu der arrayList verwenden Sie
view.Invalidate();
und dann die Klasse Aufruf der onDraw-Methode in der view-Klasse. So überschreiben Sie es so gerne.@Override
public void onDraw(Canvas c){
for(Path p: listOfPaths){
c.drawPath(p, paint);}
}
Hinweis:Dies wäre gut für einfache Zeichnung, erwarten Sie nicht zu zeichnen, die mona lisa auf Ihrem tablet oder Mobiltelefon mit dieser Methode, da Sie einmal dort sind viele Zeilen, die Sie vielleicht bemerken Sie eine Verzögerung. Wenn Sie möchten, um mehr komplizierte und professionelle. Überprüfen Sie heraus die
view.Invalidate(Rect r)
Ansatz, der nicht die Unwirksamkeit des ganzen sehen, sondern nur den Bereich, den Sie gerade gezogen