0

我搜索但没有找到任何线索来解决我的问题:

我有一个带有一些可绘制图层的 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));

我会很感激任何帮助。

4

1 回答 1

0

我找到了在我的图像视图中使用额外路径的解决方法:

Rect outRect = new Rect();
        getDrawingRect(outRect);
        mPath.addRoundRect(new RectF(outRect.left,outRect.top, width,height), floats_array, Path.Direction.CW);

并将其剪辑在 onDraw 中:

canvas.clipPath(mPath);
于 2013-05-17T11:56:09.163 回答