Filtros de imagen y video como snapchat en android
Estoy desarrollando una aplicación donde quiero que los filtros se apliquen de la manera snapchat hace, de lo que puedo entender es que están usando PagerAdapter pero no sé cómo se aplican los filtros sobre la imagen o los videos y no es otra imagen con Filtro aplicado a él. Cualquier idea o fragmento de código que pueda hacer lo mismo es muy apreciado por las imágenes y los videos tanto como por guardarlos también. Gracias: D
- Image uri no muestra imágenes en ImageView en algún dispositivo Android
- Cómo obtener datos Exif de un InputStream en lugar de un archivo?
- Android ImageView cómo adaptarse a la parte inferior izquierda, como setScaleType (ScaleType.FIT_END) ;, pero no se ajusta a la parte inferior derecha
- Imagen de carga de Android de la galería al servidor
- Cómo crear un archivo desde la URL de la imagen sin descargar la imagen
- Cambio de imagen como esquina redondeada
- Facebook Compartir imagen Url junto con el enlace en android
- Invisible / botón transparente que funciona como un regular en android?
- BitmapFactory.decodeStream devuelve siempre null y decodificador skia muestra decodificar devuelto falso
- La imagen transparente de PNG no parece agradable
- Menú contextual para guardar imágenes en una vista web de Android
- Cambio de imagen en ImageView
- Capturar imágenes con la intención de MediaStore.ACTION_IMAGE_CAPTURE en android
Lo que hago aquí es superponer dos mapas de bits entre sí. La cantidad de cualquiera de los mapas de bits debe ser visible se determina mediante el toque del usuario. Tengo un enum para qué dirección el usuario está desplazándose básicamente a la izquierda oa la derecha y NINGUNO. Dependiendo de la dirección en la que se desplaza el usuario, se aplica bitmap diferente al mapa de bits actual.
@Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { if (mCurrentScrollDirection.ordinal() == ScrollDirection.NONE.ordinal()) { if (distanceX > 0) { mCurrentScrollDirection = ScrollDirection.LEFT; } else { mCurrentScrollDirection = ScrollDirection.RIGHT; } } mTouchX = (int) e2.getX(); overlayBitmaps(mTouchX); return false; } private void overlayBitmaps(int coordinateX) { switch (mCurrentScrollDirection) { case NONE: { //do nothing here break; } case LEFT: { overlayNextBitmap(coordinateX); break; } case RIGHT: { overlayPreviousBitmap(coordinateX); break; } } } private void overlayPreviousBitmap(int coordinateX) { mImageCanvas.save(); Bitmap OSBitmap = Bitmap.createBitmap(mCurrentBitmap, coordinateX, 0, mCurrentBitmap.getWidth() - coordinateX, mCurrentBitmap.getHeight()); mImageCanvas.drawBitmap(OSBitmap, coordinateX, 0, null); Bitmap FSBitmap = Bitmap.createBitmap(mPreviousBitmap, 0, 0, coordinateX, mCurrentBitmap.getHeight()); mImageCanvas.drawBitmap(FSBitmap, 0, 0, null); mImageCanvas.restore(); mCapturedImageView.setImageDrawable(new BitmapDrawable(getResources(), mResultBitmap)); } private void overlayNextBitmap(int coordinateX) { mImageCanvas.save(); Bitmap OSBitmap = Bitmap.createBitmap(mCurrentBitmap, 0, 0, coordinateX, mCurrentBitmap.getHeight()); mImageCanvas.drawBitmap(OSBitmap, 0, 0, null); Bitmap FSBitmap = Bitmap.createBitmap(mNextBitmap, coordinateX, 0, mCurrentBitmap.getWidth() - coordinateX, mCurrentBitmap.getHeight()); mImageCanvas.drawBitmap(FSBitmap, coordinateX, 0, null); mImageCanvas.restore(); mCapturedImageView.setImageDrawable(new BitmapDrawable(getResources(), mResultBitmap)); }
Esto funciona bastante bien, sólo no he probado en dispositivos de memoria baja teniendo en cuenta que no pude encontrar muchos 🙂
Para obtener una referencia completa del código, verifique este enlace. Es mi propia biblioteca donde puedes capturar imágenes aplicar filtros y obtener una devolución de llamada a la actividad de llamada. Todavía es un trabajo en progreso.
- Autofocus de Android cuando los modos de enfoque automático continuo no son compatibles
- Editar selección de texto Anclajes ausentes