Android 图像不裁剪
我正在将Android 图像不裁剪,android,image,bitmap,crop,Android,Image,Bitmap,Crop,我正在将背景图像设置为线性布局,如下所示: 1.返回xml: <?xml version="1.0" encoding="UTF-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/back" > </item> <item>
背景
图像设置为线性布局
,如下所示:
1.返回xml:
<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/back" >
</item>
<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>
2。tile.xml
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/pie_chart_background"
android:tileMode="repeat">
</bitmap>
现在,我将back.xml设置为背景
设置为线性布局
,效果很好
我需要有一个带圆角的图像
,还有一个带圆角的边框。但是我只有带圆角的边框,而没有图像。我的代码中有什么问题吗?我遗漏了什么吗
这是我的图像的外观:
试试你的back.xml类似的东西,而不是给出一个矩形背景图像
<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="#ff00ff >
</item>
<item>
<shape android:shape="rectangle" >
<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>
Raj发布的另一个替代方案是在角落处使用透明的背景图像
由于你的背景很简单,最好的解决方案是使用9-patch,这是大多数背景图像的Android本机解决方案:,在风格上与一些网站背景的绘制方式类似
Android也有自己的9-patch creator与sdk:捆绑在一起,因此编辑自己的png文件,然后将9-patch应用到布局非常简单。9-patches的优点是,它们还可以为您调整UI的大小,这意味着您在不同屏幕上使用应用程序时不会遇到太多问题解决方案1
为边框创建9面片图像。图像的中间应该是透明的
使用RelativeLayout作为父对象,并将图像线性布局放在底部。将边框9面片设置为另一个线性布局的背景,并将其放置在图像线性布局的顶部。然后它将覆盖各个角落,您将得到预期的结果
解决方案2
public static Bitmap getRoundedCornerBitmap(Bitmap bitmap) {
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 = 12;
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;
}
将您的形状与圆角图像结合使用
您可以使用AndroidQuery加载具有圆角的图像。
看
我认为你应该这样做
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<solid android:color="@color/back" />
<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>
如果背景不是一种颜色,而是一个位图,你应该遵循这个美丽的指南
在花了几个小时的时间研究你的问题后,我终于实现了,希望现在它能给你想要的结果,请检查下面的代码,让我知道它是否有效
将适当的参数传递给下面的函数,以获得具有所需颜色边框的圆角
main.xml
原始图像
输出
以下链接帮助我实现我的目标:
你能帮我更新一下答案吗。你甚至可以使用第二种解决方案是的,我试过了,但问题是在它上面添加了一个边框,而且在横向模式下看起来不太好,如何重复添加瓷砖模式。你可以得到该图像的六边形颜色并给出。否则,可以实用地裁剪图像并将其设置为背景。否则,您将创建一个圆角图像,并将其作为背景。除了上述代码之外,对于您的案例@Goofy,您可以有一个最外层的RelativeLayout,其中包含LinearLayout和ImageView。设置imageLayout参数:android:layout\u alignTop=“@+id/frame1”android:layout\u alignBottom=“@+id/frame1”
并将LinearLayout的背景设置为透明。这样,用户将得到一种感觉,好像线性布局有一个背景图像集!!!
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<solid android:color="@color/back" />
<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>
public static Bitmap getRoundedCornerImage(Bitmap bitmap, int cornerDips, int borderDips, Context context) {
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(),
Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final int borderSizePx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, (float) borderDips,
context.getResources().getDisplayMetrics());
final int cornerSizePx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, (float) cornerDips,
context.getResources().getDisplayMetrics());
final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
final RectF rectF = new RectF(rect);
paint.setAntiAlias(true);
paint.setColor(0xFFFFFFFF);
paint.setStyle(Paint.Style.FILL);
canvas.drawARGB(0, 0, 0, 0);
canvas.drawRoundRect(rectF, cornerSizePx, cornerSizePx, paint);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint);
paint.setColor((Color.RED)); // you can change color of your border here, to other color
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth((float) borderSizePx);
canvas.drawRoundRect(rectF, cornerSizePx, cornerSizePx, paint);
return output;
}
<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>
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ImageView rl=(ImageView)findViewById(R.id.image);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.testing); // your desire drawable image.
rl.setImageBitmap(getRoundedCornerImage(bitmap, 10, 10, this));
}