Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java/Android圆形可绘制/位图-4种不同的半径和大小_Java_Android_Android Layout_Android Canvas_Drawable - Fatal编程技术网

Java/Android圆形可绘制/位图-4种不同的半径和大小

Java/Android圆形可绘制/位图-4种不同的半径和大小,java,android,android-layout,android-canvas,drawable,Java,Android,Android Layout,Android Canvas,Drawable,我搜索了一下,但没有找到任何帮助我解决问题的线索: 我有一个ImageView,其中有一些图层是可绘制的,可以向该视图显示边界半径。此外,我还设置了jpg/png文件,该文件应该显示其背景(并且应该更像css,相当于类似于'background-image:url(..)) 我的主要问题是,当jpg/png文件很小时,会出现一个问题,即首先将其弯曲,然后拉伸,导致结果图像看起来更像圆形,而不是带有圆角的拉伸矩形 重要提示:我有4个不同的角半径(从0到1000的任意数字),如腹板半径左上角、半径右

我搜索了一下,但没有找到任何帮助我解决问题的线索:

我有一个ImageView,其中有一些图层是可绘制的,可以向该视图显示边界半径。此外,我还设置了jpg/png文件,该文件应该显示其背景(并且应该更像css,相当于类似于
'background-image:url(..)

我的主要问题是,当jpg/png文件很小时,会出现一个问题,即首先将其弯曲,然后拉伸,导致结果图像看起来更像圆形,而不是带有圆角的拉伸矩形

重要提示:我有4个不同的角半径(从0到1000的任意数字),如腹板半径左上角、半径右上角等

有人遇到过这样的问题,或者知道更好的实现方法吗

我尝试添加使用自定义绘图:

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>

非常感谢您的帮助。

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

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);
Rect outRect = new Rect();
        getDrawingRect(outRect);
        mPath.addRoundRect(new RectF(outRect.left,outRect.top, width,height), floats_array, Path.Direction.CW);
canvas.clipPath(mPath);