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?
- Cómo dibujar una línea curva en android?
- Dibujo personalizado en la lona del mapa de Mapbox
- Tabla de Donuts Android
- Cómo dibujar una porción de mapa de bits a través de lienzo DrawBitmap
- Cómo dibujar con una pintura "invertida" en Android Canvas?
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.
- Android canvas drawText y-posición del texto
- Tela redimensionar tela para adaptarse a la pantalla
- Android: ¿Cómo manejar el dibujo con métodos de lienzo en diferentes tamaños de pantalla?
- ¿Cómo configurar un filtro de color para XWalkView? (Resuelto)
- Inclinar un mapa de bits sólo en la dirección vertical
- Dibujar una línea con un cierto ancho de píxel
- Dibuja un árbol (literalmente) con círculos en Android: no es una estructura de árbol
- Cómo corregir "lienzo: intentando utilizar un error de mapa de bits reciclado"?
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.
- El color de TabHost cambió entre las versiones de Android
- ¿Este patrón de mensajería de Servicio de Actividad causa una pérdida de memoria?