我搜索但没有找到任何线索来解决我的问题:
我有一个带有一些可绘制图层的 ImageView,该图层可向该视图呈现边框半径。我还设置了应该呈现其背景的 jpg/png 文件(并且应该更像 css 等价于代码'background-image:url(....)'
),
我的主要问题是,当 jpg/png 文件很小时,会出现一个问题,即它首先被拐角,然后被拉伸,结果图像的原因看起来更像圆形,而不是带有圆角的拉伸矩形。
重要提示:我有 4 个不同的角半径(从 0 到 1000 的任何数字),例如 web radius-top-left、radius-top-right 等。
有人遇到过这样的问题或知道更好的实现方式吗?
我尝试添加使用自定义可绘制对象:
public class RoundCornersBitmap extends PaintDrawable {
private Bitmap mBitmap;
private final Paint mPaint;
private final BitmapShader mShader;
private final ImageView mView;
public RoundCornersBitmap(Bitmap bmp, ImageView view) {
mBitmap = bmp;
mPaint = new Paint();
mShader = new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
mPaint.setStyle(Paint.Style.FILL);
mPaint.setAntiAlias(true);
mPaint.setColor(Color.BLACK);
mPaint.setShader(mShader);
mPaint.setFlags(Paint.FILTER_BITMAP_FLAG);
mView = view;
//example corners
this.setCornerRadii(new float[]{50, 50, 120, 120, 90, 90, 40, 40});
}
@Override
public int getIntrinsicWidth() {
return mBitmap.getWidth();
}
@Override
public int getIntrinsicHeight() {
return mBitmap.getHeight();
}
@Override
public Paint getPaint() {
return mPaint;
}
@Override
public void draw(Canvas canvas) {
getShape().draw(canvas, mPaint);
}
}
我的图层列表如下所示:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="#ff00ff"></solid>
<corners android:topLeftRadius="50px" android:topRightRadius="120px"
android:bottomLeftRadius="90px"
android:bottomRightRadius="40px"></corners>
<padding android:top="20px" android:left="20px" android:right="20px" android:bottom="20px"></padding>
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="#f0000f"></solid>
<corners android:topLeftRadius="50px" android:topRightRadius="120px"
android:bottomLeftRadius="90px"
android:bottomRightRadius="40px"></corners>
<padding android:top="1px" android:bottom="1px" android:left="1px" android:right="1px"></padding>
</shape>
</item>
</layer-list>
另外我的 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"
>
<ImageView
android:id="@+id/sk"
android:layout_width="320px"
android:layout_height="380px"
android:background="@drawable/skdrawable"
android:src="@drawable/ski2"
android:scaleType="fitCenter"
/>
</LinearLayout>
还在我的活动中编写应该完成任务的代码:
ImageView view = (ImageView) findViewById(R.id.sk);
BitmapDrawable d = (BitmapDrawable) getResources().getDrawable(R.drawable.ski2);
view.setImageDrawable(new RoundCornersBitmap(d.getBitmap(),view));
我会很感激任何帮助。