如何让FAB选择无填充,但仍然有高程?

时间:2015-12-15 14:26:26

标签: android floating-action-button android-elevation

背景

我有一个小圆形的联系人照片视图,我需要向用户显示。 如果照片可用,我应该显示它,同时图像圆形为圆形,并且有一个高程。

如果照片不可用,我会在里面显示一个带有背景的图标,同时它仍然是圆形的并且有高度。

问题

我设法让照片显示仅在Android 5及更高版本上运行:

enter image description here

但是,它试图显示FAB的背景时边缘颜色不好,并且在Android 4.x及其下方显示为简单的矩形内容,没有任何与FAB相关的内容,可能是因为padding正在保护它以显示阴影。

我还需要能够添加笔划(圆形图像周围的细线特定颜色),但我不确定如何添加它。

我尝试了什么

这是在布局文件中:

<android.support.design.widget.FloatingActionButton
    android:id="@+id/image"
    android:layout_width="@dimen/test"
    android:layout_height="@dimen/test"/>

“test”是80dp。

这是在代码中:

    FloatingActionButton floatingActionButton = (FloatingActionButton) view.findViewById(R.id.image);
    floatingActionButton.setPadding(0, 0, 0, 0);
    final Bitmap bitmap = ...
    RoundedCornersDrawable roundedCornersDrawable = new RoundedCornersDrawable(getResources(), bitmap, bitmap.getWidth() / 2);
    floatingActionButton.setImageDrawable(roundedCornersDrawable);

RoundedCornersDrawable的代码:

public class RoundedCornersDrawable extends BitmapDrawable {

    private final BitmapShader bitmapShader;
    private final Paint p;
    private final RectF rect;
    private final float borderRadius;

    public RoundedCornersDrawable(final Resources resources, final Bitmap bitmap, final float borderRadius) {
        super(resources, bitmap);
        bitmapShader = new BitmapShader(getBitmap(), Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
        final Bitmap b = getBitmap();
        p = getPaint();
        p.setAntiAlias(true);
        p.setShader(bitmapShader);
        final int w = b.getWidth(), h = b.getHeight();
        rect = new RectF(0, 0, w, h);
        this.borderRadius = borderRadius < 0 ? 0.15f * Math.min(w, h) : borderRadius;
    }

    @Override
    public void draw(final Canvas canvas) {
        canvas.drawRoundRect(rect, borderRadius, borderRadius, p);
    }
}

问题

如何让FAB以这种方式工作?对于所有Android版本,我如何随意禁用填充,但仍然有带阴影的圆角图像?

如何在圆角FAB中添加笔划?

1 个答案:

答案 0 :(得分:1)

我认为我写这篇文章的速度太快了,而这里似乎已有一篇关于它的文章:

How to add a shadow and a border on circular imageView android?

我将看一下它,看看它是否符合我需要的要求。

编辑:它看起来不像FAB(尤其是影子),而且我没有看到将小内容放在中心的能力,就像在FAB中一样。它始终将内容置于中心裁剪方式。

当然,我可以在其中放入一个较小尺寸的图像......

编辑:我想我这次找到了合适的图书馆: https://github.com/lopspower/CircularImageView

它允许阴影,自定义阴影大小和颜色,以及边框,以及如何缩放图像。

它不是一个FAB,它没有能力将图像置于中心而不会裁剪,但它对我来说已经足够了。