【问题标题】:Android custom View with ViewOutlineProvider adds white border before shadow带有 ViewOutlineProvider 的 Android 自定义视图在阴影前添加白色边框
【发布时间】:2019-08-27 16:06:39
【问题描述】:

我有一个自定义视图,我在画布上绘制一个矩形。要向该自定义视图添加阴影/高度,我正在使用 ViewOutlineProvider,如下所示:

private class CustomOutline extends ViewOutlineProvider {

    int width;
    int height;

    CustomOutline(int width, int height) {
        this.width = width;
        this.height = height;
    }

    @Override
    public void getOutline(View view, Outline outline) {
        outline.setRect(0, 0, width, height);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
            outline.offset(5,5);
        }
    }
}

并在视图大小发生变化时调用 setOutlineProvider。

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        setOutlineProvider(new CustomOutline(w, h));
    }
}

我得到了一个阴影,如下面的屏幕截图所示。如果你仔细观察,你会发现阴影前有一条白线(红色矩​​形和它的阴​​影之间)。 不过,我正在为几件事苦苦挣扎

  • 如何去除那条白线?
  • 如何让阴影也显示在上方?
  • 还有什么方法可以防止视角倾斜时出现像素化?

【问题讨论】:

    标签: android android-custom-view


    【解决方案1】:

    尝试设置outline.setAlpha(0),像这样:

     @Override
     public void getOutline(View view, Outline outline) {
            outline.setAlpha(0);//add this
            outline.setRect(0, 0, width, height);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
                outline.offset(5,5);
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多