¿Cómo puedo hacer bordes rizados en una vista de imagen en android?

Introduzca aquí la descripción de la imagen

Esto es lo que tengo que lograr.

Alguien sabe cómo puedo abordar esto?

¿Se puede hacer en XML? Si no, ¿cómo escalaría una imagen que tenga la forma de este?

2 Solutions collect form web for “¿Cómo puedo hacer bordes rizados en una vista de imagen en android?”

Trate de usar mi clase. Le permite establecer cualquier tipo de fondo y obtener el efecto de los bordes rizados en su imagen:

/** * Created by GIGAMOLE on 01.07.2015. */ public class CurlyEdgesImageView extends ImageView { private int width; private int height; private ArrayList<FloatPoint> points = new ArrayList<>(); private final Path curlyEdgesPath = new Path(); private final Paint curlyEdgesPaint = new Paint(Paint.ANTI_ALIAS_FLAG) { { setDither(true); } }; private final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG) { { setDither(true); setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT)); } }; private Canvas curlyEdgesCanvas; private Bitmap curlyEdgesBitmap; private Canvas canvas; private Bitmap bitmap; private float offset; private float curlyEdgesCount = 20f; public CurlyEdgesImageView(Context context) { super(context); } public CurlyEdgesImageView(Context context, AttributeSet attrs) { super(context, attrs); } public CurlyEdgesImageView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { this.width = w; this.height = h; this.offset = this.width / (curlyEdgesCount * 2); bitmap = drawableToBitmap(getDrawable()); canvas = new Canvas(bitmap); curlyEdgesBitmap = Bitmap.createBitmap(w, (int) offset, Bitmap.Config.ARGB_8888); curlyEdgesCanvas = new Canvas(curlyEdgesBitmap); drawCurlyEdges(); canvas.drawBitmap(curlyEdgesBitmap, 0, getHeight() - (int) offset, paint ); super.onSizeChanged(w, h, oldw, oldh); } private void drawCurlyEdges() { final float innerOffset = curlyEdgesCount / offset; int counterY = 1; for (float i = -offset; i < this.width + offset; i += offset) { if (counterY++ % 2 == 0) { points.add(new FloatPoint(i + innerOffset, offset)); } else { points.add(new FloatPoint(i + innerOffset, 0)); } } points.add(new FloatPoint(this.width + offset, (int) offset * 2)); points.add(new FloatPoint(-offset, (int) offset * 2)); if (points.size() > 1) { FloatPoint prevPoint = null; for (int i = 0; i < points.size(); i++) { FloatPoint point = points.get(i); if (i == 0) { curlyEdgesPath.moveTo(point.x, point.y); } else { float midX = (prevPoint.x + point.x) / 2f; float midY = (prevPoint.y + point.y) / 2f; if (i == 1) { curlyEdgesPath.lineTo(midX, midY); } else { curlyEdgesPath.quadTo(prevPoint.x, prevPoint.y, midX, midY); } } prevPoint = point; } curlyEdgesPath.lineTo(prevPoint.x, prevPoint.y); } curlyEdgesCanvas.drawPath(curlyEdgesPath, curlyEdgesPaint); } @Override protected void onDraw(Canvas canvas) { canvas.drawBitmap(bitmap, 0, 0, null); } private Bitmap drawableToBitmap(final Drawable drawable) { if (drawable instanceof BitmapDrawable) { return convertToMutable(getContext(), ((BitmapDrawable) drawable.mutate()).getBitmap()); } final Bitmap bitmap = Bitmap.createBitmap(this.width, this.height, Bitmap.Config.ARGB_8888); final Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); drawable.draw(canvas); return convertToMutable(getContext(), bitmap); } @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) public static Bitmap convertToMutable(final Context context, final Bitmap imgIn) { final int width = imgIn.getWidth(), height = imgIn.getHeight(); final Bitmap.Config type = imgIn.getConfig(); File outputFile = null; final File outputDir = context.getCacheDir(); try { outputFile = File.createTempFile(Long.toString(System.currentTimeMillis()), null, outputDir); outputFile.deleteOnExit(); final RandomAccessFile randomAccessFile = new RandomAccessFile(outputFile, "rw"); final FileChannel channel = randomAccessFile.getChannel(); final MappedByteBuffer map = channel.map(FileChannel.MapMode.READ_WRITE, 0, imgIn.getRowBytes() * height); imgIn.copyPixelsToBuffer(map); imgIn.recycle(); final Bitmap result = Bitmap.createBitmap(width, height, type); map.position(0); result.copyPixelsFromBuffer(map); channel.close(); randomAccessFile.close(); outputFile.delete(); return result; } catch (final Exception e) { } finally { if (outputFile != null) outputFile.delete(); } return null; } private class FloatPoint { public float x; public float y; private FloatPoint(float x, float y) { this.x = x; this.y = y; } } } 

Introduzca aquí la descripción de la imagen

  1. Crear una ola como wave_pattern_image
  2. Hacer un dibujable con él tal que repite
  3. Establece esto como fondo de tu vista

Dibujable / tilebg.xml

 <?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/wave_pattern_image" android:tileMode="repeat" /> 
  • Ruta para getResourceAsStream en el proyecto de Android
  • Android: crear imagen circular con picasso
  • Cargar imagen en ImageView de la URL almacenada en JSONString en Android
  • Cómo obtener la imagen de url sitio web en imageview en android
  • Quiero transferir la imagen de una actividad a otra
  • Teniendo problema en el dispositivo verdadero usando la imagen del vector en androide. SVG-android
  • ¿Por qué se bloquea getActivity () durante la prueba JUnit cuando las llamadas de ImageView personalizadas comienzanAnimation (Animation)?
  • BitmapFactory.decodeFile devuelve una imagen nula incluso existe
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.