Растровое изображение с закругленными углами с инсультом

У меня есть изображение с острыми краями. Введите описание изображения здесь

Tile_mode.xml

<?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/background" android:tileMode="repeat"> </bitmap> 

Back.xml

 <?xml version="1.0" encoding="UTF-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/tile_mode" /> <item> <shape> <solid/> <stroke android:width="1dip" android:color="#225786" /> <corners android:radius="10dip"/> <padding android:left="0dip" android:top="0dip" android:right="0dip" android:bottom="0dip" /> </shape> </item> 

layout.xml

 <LinearLayout android:id="@+id/frame1" android:background="@drawable/back" android:layout_width="fill_parent" android:layout_height="wrap_content"> </LinearLayout> 

Я устанавливаю изображение в качестве фона для этого макета и рисую границу, но проблема заключается в том, что изображение квадратное с острыми краями, а рамка, которую я рисую в xml, является закругленными углами. Итак, как сделать изображение с закругленными углами?

Solutions Collecting From Web of "Растровое изображение с закругленными углами с инсультом"

Это одно из решений, в котором вам нужно imageview with your desire image: make round to your main layout background и внутри вашего imageview with your desire image:

Что-то вроде ниже:

back.xml

Это сделает ваше изображение круглым

 <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <stroke android:width="1dp" android:color="#dd7b7a"/> <corners android:bottomRightRadius="10dp" android:bottomLeftRadius="10dp" android:topLeftRadius="10dp" android:topRightRadius="10dp"/> <solid android:color="#dd7b7a"/> </shape> 

tile_mode.xml

 <?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/background" android:tileMode="repeat" /> 

layout.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" > <LinearLayout android:padding="4dip" android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/back" android:gravity="center_horizontal" > <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/tile_mode" /> </LinearLayout> </LinearLayout> 

обновленный

После копания лотов я столкнулся с решением, которое уже отправлено на stackoverflow

Изменение изображения в виде закругленного угла

Как заставить ImageView иметь закругленные углы

шаг 1@

main.xml

  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" tools:context=".MainActivity" > <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" /> </RelativeLayout> 

Шаг 2@

Сделайте одну функцию, которая будет округлена до вашего растрового изображения, используя холст.

 public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, int pixels) { Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap .getHeight(), Config.ARGB_8888); Canvas canvas = new Canvas(output); final int color = 0xff424242; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); final RectF rectF = new RectF(rect); final float roundPx = pixels; paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); canvas.drawRoundRect(rectF, roundPx, roundPx, paint); paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); return output; } 

шаг 3@

 public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ImageView image=(ImageView)findViewById(R.id.image); Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.testing); image.setImageBitmap(getRoundedCornerBitmap(bitmap, 20)); 

Ответ RobinHood работал для меня с одним изменением из-за ошибки, которую я получал о переменной присваивании.

Мне пришлось изменить линию:

  paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); 

К этой строке:

  paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); 

Сделав мой полный код:

 public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_main); TextView textViewTitle = (TextView) findViewById(R.id.MYTEXTIDHERE); textViewTitle.setText("Some Text"); ImageButton imageButtonSetter = (ImageButton) findViewById(R.id.MYIMAGEIDHERE); Bitmap myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.MYIMAGENAMEHERE); imageButtonSetter.setImageBitmap(getRoundedCornerBitmap(myBitmap, 40)); } public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, int pixels) { Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap .getHeight(), Config.ARGB_8888); Canvas canvas = new Canvas(output); final int color = 0xff424242; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); final RectF rectF = new RectF(rect); final float roundPx = pixels; paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); canvas.drawRoundRect(rectF, roundPx, roundPx, paint); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); return output; } 

Фактически, есть библиотека, которую я создал, которая точно соответствует вашим потребностям, и вам не нужно беспокоиться об этих XML-файлах.

https://github.com/pungrue26/SelectableRoundedImageView

С помощью этого проекта с открытым исходным кодом вы можете устанавливать разные радиусы на каждом углу и устанавливать границы (ширина и цвета) и т. Д., Как показано ниже. Надеюсь, это может вам помочь.

Округленный ImageView внутри CardView

Попробуйте свой back.xml что-то вроде этого.

 <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="#ffffffff"/> <stroke android:width="3dp" android:color="#ff000000" /> <padding android:left="1dp" android:top="1dp" android:right="1dp" android:bottom="1dp" /> <corners android:bottomRightRadius="7dp" android:bottomLeftRadius="7dp" android:topLeftRadius="7dp" android:topRightRadius="7dp"/> </shape> 1 <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="#ffffffff"/> <stroke android:width="3dp" android:color="#ff000000" /> <padding android:left="1dp" android:top="1dp" android:right="1dp" android:bottom="1dp" /> <corners android:bottomRightRadius="7dp" android:bottomLeftRadius="7dp" android:topLeftRadius="7dp" android:topRightRadius="7dp"/> </shape> 1 <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="#ffffffff"/> <stroke android:width="3dp" android:color="#ff000000" /> <padding android:left="1dp" android:top="1dp" android:right="1dp" android:bottom="1dp" /> <corners android:bottomRightRadius="7dp" android:bottomLeftRadius="7dp" android:topLeftRadius="7dp" android:topRightRadius="7dp"/> </shape> 1 <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="#ffffffff"/> <stroke android:width="3dp" android:color="#ff000000" /> <padding android:left="1dp" android:top="1dp" android:right="1dp" android:bottom="1dp" /> <corners android:bottomRightRadius="7dp" android:bottomLeftRadius="7dp" android:topLeftRadius="7dp" android:topRightRadius="7dp"/> </shape> 

Сегодня у меня была аналогичная проблема, только мой образ был картой Google. Вам действительно нужно скрыть углы, а способ сделать это – создать 9Patch как следующий:

Введите описание изображения здесь

И применять его в качестве фона по всему вашему макету или другому макету, покрывающему ваш макет. Для получения дополнительной информации см. Следующую ссылку:

Есть ли способ реализовать закругленные углы для Mapfragment?

Я поступил на этот сайт: http://www.sumopaint.com/app/
И нарисовал все это вручную, вы можете взять мой пример и изменить цвета по своему вкусу. Вам, вероятно, понадобится следующий:

Введите описание изображения здесь

Вы можете получить дополнительную информацию о том, как создать 9Patch в следующих ссылках:

http://radleymarx.com/blog/simple-guide-to-9-patch/

http://android9patch.blogspot.co.il/

Хорошо давайте попробуем ниже

  <?xml version="1.0" encoding="utf-8"?> <shape android:shape="rectangle" xmlns:android="http://schemas.android.com/apk/res/android"> <corners android:radius="30dp"/> <stroke android:width="2dp" android:color="#000000"/> </shape> <LinearLayout android:id="@+id/frame1" android:background="@drawable/corner_background" android:layout_width="fill_parent" android:layout_height="wrap_content" android:padding="5dp" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/background" /> </LinearLayout> 
 <?xml version="1.0" encoding="utf-8"?> 

 <item> <bitmap android:src="@drawable/bg_striped_img" android:tileMode="repeat" /> </item> <item android:left="-20dp" android:top="-20dp" android:right="-20dp" android:bottom="-20dp"> <shape android:shape="oval" > <stroke android:width="20dp" android:color="#ffffffff" /> <solid android:color="#00000000" /> <size android:height="120dp" android:width="120dp" /> </shape> </item> <item > <shape android:shape="oval" > <stroke android:width="1dp" android:color="#ff999999" /> <solid android:color="#00000000" /> <size android:height="120dp" android:width="120dp" /> </shape> </item> 1 <item> <bitmap android:src="@drawable/bg_striped_img" android:tileMode="repeat" /> </item> <item android:left="-20dp" android:top="-20dp" android:right="-20dp" android:bottom="-20dp"> <shape android:shape="oval" > <stroke android:width="20dp" android:color="#ffffffff" /> <solid android:color="#00000000" /> <size android:height="120dp" android:width="120dp" /> </shape> </item> <item > <shape android:shape="oval" > <stroke android:width="1dp" android:color="#ff999999" /> <solid android:color="#00000000" /> <size android:height="120dp" android:width="120dp" /> </shape> </item> 

Передайте исходное растровое изображение следующей функции, и в результате получится округленное растровое изображение :). Надеюсь, это поможет кому-то.

  public Bitmap getRoundedBitmap(Bitmap bitmap) { Bitmap resultBitmap; int originalWidth = bitmap.getWidth(); int originalHeight = bitmap.getHeight(); float r; if (originalWidth > originalHeight) { resultBitmap = Bitmap.createBitmap(originalHeight, originalHeight, Bitmap.Config.ARGB_8888); r = originalHeight / 2; } else { resultBitmap = Bitmap.createBitmap(originalWidth, originalWidth, Bitmap.Config.ARGB_8888); r = originalWidth / 2; } Canvas canvas = new Canvas(resultBitmap); final Paint paint = new Paint(); final Rect rect = new Rect(ConstsCore.ZERO_INT_VALUE, ConstsCore.ZERO_INT_VALUE, originalWidth, originalHeight); paint.setAntiAlias(true); canvas.drawARGB(ConstsCore.ZERO_INT_VALUE, ConstsCore.ZERO_INT_VALUE, ConstsCore.ZERO_INT_VALUE, ConstsCore.ZERO_INT_VALUE); canvas.drawCircle(r, r, r, paint); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); return resultBitmap; }