位图重复+圆角 [英] Bitmap repeat + rounded corners

查看:171
本文介绍了位图重复+圆角的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想创建圆角矩形和背景重复位图。我写这样的,但得到的位图的角落。

谁能帮帮忙?

background.xml

 < XML版本=1.0编码=UTF-8&GT?;
<层列表的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android>

<项目>
    <形状>
        <中风
            机器人:宽=1DP
            机器人:颜色=#FFFFFF/>

        <边角机器人:半径=50dp/>
    < /形状>
< /项目>
<项目>
    <位图
        机器人:SRC =@可绘制/ carbon_4
        机器人:TILEMODE =重复/>
< /项目>

< /层列表>
 

解决方案

我发现的这个帖子通过罗曼盖伊这是一个更简单的方法,以圆润的边角上的瓷砖位图。这里的答案很简单:

 类CurvedAndTiled扩展绘制对象{

    私人最终浮动mCornerRadius;
    私人最终RectF mRect =新RectF();
    私人最终BitmapShader mBitmapShader;
    私人最终涂料mTilePaint;

    CurvedAndTiled(
            点阵位图,
            浮动cornerRadius){
        mCornerRadius = cornerRadius;

        mBitmapShader =新BitmapShader(位图,
                Shader.TileMode.REPEAT,Shader.TileMode.REPEAT);

        mTilePaint =新的油漆();
        mTilePaint.setAntiAlias​​(真正的);
        mTilePaint.setShader(mBitmapShader);
    }

    @覆盖
    保护无效onBoundsChange(矩形边界){
        super.onBoundsChange(边界);
        mRect.set(0,0,bounds.width(),bounds.height());
    }

    @覆盖
    公共无效画(油画画布){
        canvas.drawRoundRect(mRect,mCornerRadius,mCornerRadius,mTilePaint);
    }

    @覆盖
    公众诠释getOpacity(){
        返回PixelFormat.TRANSLUCENT;
    }

    @覆盖
    公共无效setAlpha(INT阿尔法){
        mTilePaint.setAlpha(阿尔法);
    }

    @覆盖
    公共无效setColorFilter(ColorFilter CF){
        mTilePaint.setColorFilter(CF);
    }
}
 

您只需设置你的观点的背景绘制是这些人之一,你的好去。

I am trying to create rectangle with rounded corners and background as repeated bitmaps. I am writing like this, but getting bitmaps in the corners.

Could anyone help out?

background.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

<item>
    <shape>
        <stroke
            android:width="1dp"
            android:color="#FFFFFF" />

        <corners android:radius="50dp" />
    </shape>
</item>
<item>
    <bitmap
        android:src="@drawable/carbon_4"
        android:tileMode="repeat" />
</item>

</layer-list>

解决方案

I found this post by Romain Guy that's a much easier way to round corners on a tiled bitmap. Here's the short answer:

class CurvedAndTiled extends Drawable {

    private final float mCornerRadius;
    private final RectF mRect = new RectF();
    private final BitmapShader mBitmapShader;
    private final Paint mTilePaint;        

    CurvedAndTiled(
            Bitmap bitmap, 
            float cornerRadius) {
        mCornerRadius = cornerRadius;

        mBitmapShader = new BitmapShader(bitmap,
                Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);

        mTilePaint = new Paint();
        mTilePaint.setAntiAlias(true);
        mTilePaint.setShader(mBitmapShader);             
    }

    @Override
    protected void onBoundsChange(Rect bounds) {
        super.onBoundsChange(bounds);
        mRect.set(0, 0, bounds.width(), bounds.height());
    }

    @Override
    public void draw(Canvas canvas) {
        canvas.drawRoundRect(mRect, mCornerRadius, mCornerRadius, mTilePaint);           
    }

    @Override
    public int getOpacity() {
        return PixelFormat.TRANSLUCENT;
    }

    @Override
    public void setAlpha(int alpha) {
        mTilePaint.setAlpha(alpha);
    }

    @Override
    public void setColorFilter(ColorFilter cf) {
        mTilePaint.setColorFilter(cf);
    }       
}

You just set your view's background drawable to be one of these guys and your good to go.

这篇关于位图重复+圆角的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆