如何为ImageView设置边框

3

enter image description here

我正在开发一款安卓应用程序,我想在视图中的特定位置放置一个ImageView。为此,我使用了以下代码并成功地实现了:

ImageView image = (ImageView) findViewById(R.id.imageView1);
Bitmap bMap = BitmapFactory.decodeResource(getResources(), R.drawable.mrng);
Matrix mat = new Matrix();
mat.postRotate(350);
Bitmap bMapRotate = Bitmap.createBitmap(bMap, 0, 0, bMap.getWidth(),bMap.getHeight(), mat, true);
image.setImageBitmap(bMapRotate);

现在我想给这张图片加上边框。我已经制作了一个形状的xml,并将其设置为图像视图的背景。
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#FFFFFF" />
    <stroke android:width="3dp" android:color="#000000" />
</shape>

但是当我为图像视图设置背景形状时,它没有给出正确的输出。请帮帮我。

我不想要ImageView周围的边框,而是想要旋转图片周围的边框。

2个回答

4

编辑:根据问题的澄清,我完全重写了我的答案。这是我实现你想要的效果的方法。思路是先绘制框架,然后旋转:

    ImageView image = (ImageView) findViewById(R.id.TestImage);
    Bitmap bMap = BitmapFactory.decodeResource(getResources(), R.drawable.image);

    final int BORDER_WIDTH = 3;
    final int BORDER_COLOR = Color.BLACK;
    Bitmap res = Bitmap.createBitmap(bMap.getWidth() + 2 * BORDER_WIDTH,
                                     bMap.getHeight() + 2 * BORDER_WIDTH,
                                     bMap.getConfig());
    Canvas c = new Canvas(res);
    Paint p = new Paint();
    p.setColor(BORDER_COLOR);
    c.drawRect(0, 0, res.getWidth(), res.getHeight(), p);
    p = new Paint(Paint.FILTER_BITMAP_FLAG);
    c.drawBitmap(bMap, BORDER_WIDTH, BORDER_WIDTH, p);

    Matrix mat = new Matrix();
    mat.postRotate(350);
    Bitmap bMapRotate = Bitmap.createBitmap(res, 0, 0, res.getWidth(), res.getHeight(), mat, true);
    image.setImageBitmap(bMapRotate);        

这是结果的截图: enter image description here

1
@Arun 我知道了,我被 iOS 给弄糊涂了。我更新了我的答案:是 android:cropToPadding - Aleks G
嗯...我刚测试了一下,它运行得很好:我在图像周围得到了一个3dp的黑色边框。我正在更新我的答案,附上我使用的完整XML。 - Aleks G
嗨..请将代码放在OnCreate方法中并再次测试...然后你就知道问题所在了... ImageView image =(ImageView)findViewById(R.id.TestImage); Bitmap bMap = BitmapFactory.decodeResource(getResources(),R.drawable.mrng); Matrix mat = new Matrix(); mat.postRotate(350); Bitmap bMapRotate = Bitmap.createBitmap(bMap,0,0,bMap.getWidth(),bMap.getHeight(),mat,true); image.setImageBitmap(bMapRotate); - Arun PS
请查看我添加的屏幕截图。这是我得到的输出结果。 - Arun PS
我正在使用 paint.setAntiAlias(true); 但边框仍然看起来很粗糙,有没有解决办法? - Vivek Thummar
显示剩余6条评论

0

在Android中,有一种方法可以为ImageView甚至任何视图添加边框。在XML中,在ImageView的每个侧面上放置四个简单的<View>。这些视图可以分配任何类型的样式。您可以使用相对布局,在其中可以轻松地在ImageView周围放置四个边框。

这是一种有点冗长的过程,但是有效。


这个代码只有在没有我所应用的矩阵时才能正常工作。我必须使其与我的矩阵一起正常工作。 - Arun PS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接