Android – Cómo dibujar en vista

Estoy tratando de pintar en mi propia vista (R.id.view), pero este código no parece tener ningún efecto. No me está permitiendo dibujar nada.

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

¿Qué hago para usar la pintura de dedo freehanf en mi propia vista?

One Solution collect form web for “Android – Cómo dibujar en vista”

Sería mejor si usted hizo una clase que la vista ampliada, y establecer que a la vista de contenido, su más dinámica de esa manera. También el parámetro Action_Move se llama mucho durante eventos táctiles, por lo que podría ser mejor tomar nota de que, de lo contrario, obtendrá una línea recta cuando quería una curva.

Editar :
Usted comenzaría en el onCreate cambiando
View view = new MyView();
setContentView(view);

Dentro de tu clase MyView tendrías una arrayList de objetos 'Path', cada vez que Action_UP sea llamado, agregas la ruta al arrayList, usa view.Invalidate(); Y luego la clase llamará el método onDraw en su clase de vista. Así que lo reemplazas así.

@Override public void onDraw(Canvas c){
for(Path p: listOfPaths){
c.drawPath(p, paint);}
}

Nota: Esto sería bueno para el dibujo simple, no espere dibujar el mona lisa en su tablilla o teléfono con este método puesto que una vez que haya muchas líneas usted puede ser que note un retraso. Si usted quiere conseguir más complicado y profesional. Compruebe hacia fuera el view.Invalidate(Rect r) acercamiento a él, que no invalidará la visión entera sino solamente la porción que usted apenas dibujó

  • ¿Qué tipo de conexión existe entre innerRadiusRatio y thicknessRatio de la clase GradientDrawable?
  • ¿Cómo se anima un cambio en el relleno de una vista?
  • Configurar la tipografía de la sugerencia en TextEdit
  • ¿Existen bibliotecas de terceros para Android?
  • Superponer imágenes en la vista previa de la cámara SurfaceView
  • Solución para Android SurfaceView touch lag
  • La vista personalizada de Android solo recibe onDraw una vez
  • SuperficieCreada () Nunca llamado
  • Android SurfaceView mostrar imagen después de vídeo (superficie clara)
  • Obtener nuevo mapa de bits de imagen escalada y visible
  • ¿Es posible crear este tipo de vista personalizada en android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.