Android – dibujo táctil

Estoy mirando esta aplicación de dibujo de ejemplo de Google, y cuando ejecuto la aplicación en el simulador y tratar de dibujar con mi ratón, el dibujo no aparece sin problemas. Los círculos aparecen con espacios entre ellos. Solamente cuando arrastro mi ratón lentamente consigo una línea ininterrumpida. Todavía no tengo un dispositivo real para probar esto, así que quiero saber si esto es lo que será en el dispositivo real también, o es un comportamiento de simulador?

Si así es como aparecerá en el dispositivo también, ¿qué debo hacer para que el dibujo al tacto sea suave?

ACTUALIZAR:

El código real que hace el dibujo es:

private void drawPoint(float x, float y, float pressure, float width) { if (width < 1) width = 6; if (mBitmap != null) { float radius = width / 2; int pressureLevel = (int)(pressure * 255); mPaint.setARGB(pressureLevel, 255, 255, 255); mCanvas.drawCircle(x, y, radius, mPaint); mRect.set((int) (x - radius - 2), (int) (y - radius - 2), (int) (x + radius + 2), (int) (y + radius + 2)); invalidate(mRect); } } @Override public boolean onTouchEvent(MotionEvent event) { int N = event.getHistorySize(); int P = event.getPointerCount(); for (int i = 0; i < N; i++) { for (int j = 0; j < P; j++) { mCurX = event.getHistoricalX(j, i); mCurY = event.getHistoricalY(j, i); drawPoint(mCurX, mCurY, event.getHistoricalPressure(j, i), event.getHistoricalTouchMajor(j, i)); } } for (int j = 0; j < P; j++) { mCurX = event.getX(j); mCurY = event.getY(j); drawPoint(mCurX, mCurY, event.getPressure(j), event.getTouchMajor(j)); } } 

Cualquier ayuda en la mejora sería muy apreciada.

Introduzca aquí la descripción de la imagen

Será irregular, pero creo que el código está dibujando puntos, así que si dibujas una línea, empezando donde el último extremo fue dibujado al nuevo punto, será continuo.

Y sí, se verá de la misma manera en un dispositivo real.

La otra opción, que estoy haciendo desde la memoria, es que había algún valor de presión que estaba entre 0 y 255, o 0 y 1, establecerlo al valor más alto, todo el tiempo. Que en realidad puede ser una solución simple a su problema.

Sería de ayuda si usted muestra el código que realmente está haciendo el dibujo, BTW.

ACTUALIZAR:

Como mencioné cambiar esta línea:

 int pressureLevel = (int)(pressure * 255); 

a

 int pressureLevel = (int)(255); 

Debe solucionar su problema.

Si eso no lo hace, entonces en lugar de usar drawCircle puede que desee simplemente usar drawLine , entonces usted mantendrá un registro del último círculo que acababa de dibujar.

Es mejor ejecutar en dispositivo no emulador, ya que el emulador de procesamiento de la acción en tiempo real es demasiado lento :).

Quizás intente esto:

 public boolean onTouch(View view, MotionEvent event) { if (event.getHistorySize() == 0) { x = event.getX(); y = event.getY(); } if (x == 0 && y == 0) { x = event.getX(); y = event.getY(); } bitmapCanvas.drawLine(x, y, event.getX(), event.getY(), paint); x = event.getX(); y = event.getY(); invalidate(); return true; } 

Algunas cosas tienen que ser mejoradas, pero en general esto es bueno para el dibujo.

Hay un método simple que se supone para solucionar este problema, Cuando se definen los atributos mPaint pruebe:

 mPaint.setStrokeJoin(Paint.Join.ROUND); 

Este atributo se une a las "líneas dentadas" en una buena línea suave.

  • Problema con ComposeShader en Android 4.1.1
  • Cómo dibujar el texto sobre lienzo?
  • Cómo encontrar la lista de puntos en la línea sobre lienzo android
  • Cómo blit () en android?
  • Dibuja un camino curvo en la lona?
  • RecyclerView con elementos personalizados
  • Implementación de Fling en lienzo android
  • Dibuja el texto dentro de un rectángulo relleno mediante el uso de Canvas Android
  • Dibujo sobre lienzo - PorterDuff.Mode.CLEAR dibuja negro! ¿Por qué?
  • Cómo rotar un lienzo en un punto específico usando android.graphics.Camera.rotateX (angle)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.