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?

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ó

  • Vista androide o surfaceView, ¿qué debo usar?
  • Android: onPreviewFrame nunca llamado sin SurfaceView
  • ¿Existen bibliotecas de terceros para Android?
  • ViewPager omitir las vistas de devolución dejando en blanco
  • Imagen de Android vista de la gravedad
  • Evite onMeasure y onLayout cada vez que ImageView Bitmap se establece
  • Colocación / superposición (índice-z) una vista encima de las pestañas de la barra de acciones
  • Adición de vista de texto a la vista de superficie
  • Cómo escalar el video en un SurfaceView más grande que la ventana en Android?
  • ¿Qué tipo de conexión existe entre innerRadiusRatio y thicknessRatio de la clase GradientDrawable?
  • Vista previa de la cámara Android estirada
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.