【问题标题】:ShowCaseView circle sizeShowCaseView 圆圈大小
【发布时间】:2014-06-03 03:01:30
【问题描述】:

是否可以在 ShowCaseView 中更改当前圆圈的大小?

我的代码中有以下内容:

ShowcaseView.ConfigOptions co = new ShowcaseView.ConfigOptions();
            co.hideOnClickOutside = false;
            return ShowcaseView.insertShowcaseView(id, activity, title, message, co);

但是现在,我只是显示 ShowCaseView 的默认大小,如果是这样,我该如何调整它的大小?

谢谢!

有关 ShowCaseView 的更多信息,这将有所帮助.. https://github.com/amlcurran/Showcaseview

【问题讨论】:

    标签: android showcaseview


    【解决方案1】:

    我找到了方法,我们必须对代码进行一些更改。 我正在写这个答案,而当前 ShowcaseView 版本是 5.0

    A) scalemultiplier 变成了 orphelin,我们必须重新实现它。

    1) 打开StandarShowcaseDrawer.java,找到drawShowcase方法,修改如下:

    @Override
        public void drawShowcase(Bitmap buffer, float x, float y, float scaleMultiplier) {
            Canvas bufferCanvas = new Canvas(buffer);
            //[GIOVA]
            //To avoid an infinite exception
            if(scaleMultiplier == 0.0f)
                scaleMultiplier = 0.001f;
            //[/GIOVA]
            //[Original]
                //bufferCanvas.drawCircle(x, y, showcaseRadius, eraserPaint);
            //[/Original]
            //[GIOVA]
                bufferCanvas.drawCircle(x, y, showcaseRadius * scaleMultiplier, eraserPaint);
            //[/GIOVA]
            int halfW = getShowcaseWidth() / 2;
            int halfH = getShowcaseHeight() / 2;
            int left = (int) (x - halfW);
            int top = (int) (y - halfH);
            showcaseDrawable.setBounds(left, top,
                    left + getShowcaseWidth(),
                    top + getShowcaseHeight());
            showcaseDrawable.draw(bufferCanvas);
        }
    

    注意:请注意,我已经放置了一些 [GIOVA] 和 [Original] 标签,因此您可以比较更改;)

    2) 打开NewShowcaseDrawer.java,与上一步相同:

    @Override
        public void drawShowcase(Bitmap buffer, float x, float y, float scaleMultiplier) {
            Canvas bufferCanvas = new Canvas(buffer);
            //[GIOVA]
            //To avoid an infinite exception
            if(scaleMultiplier == 0.0f)
                scaleMultiplier = 0.001f;
            //[/GIOVA]
            eraserPaint.setAlpha(ALPHA_60_PERCENT);
            //[Original]
            //bufferCanvas.drawCircle(x, y, outerRadius , eraserPaint);
            //eraserPaint.setAlpha(0);
            //bufferCanvas.drawCircle(x, y, innerRadius , eraserPaint);
            //[/Original]
    
            //[GIOVA]
            bufferCanvas.drawCircle(x, y, outerRadius * scaleMultiplier, eraserPaint);
            eraserPaint.setAlpha(0);
            bufferCanvas.drawCircle(x, y, innerRadius * scaleMultiplier, eraserPaint);
            //[/GIOVA]
        }
    

    B) 现在我们需要能够设置值,我们将向构建器添加一个方法。 打开 ShowcaseView.java 然后找到以下行:

    public static class Builder {
    

    在这个 Builder 类中,添加以下方法:

     public Builder setScaleMultiplier(float multiplier){
                showcaseView.setScaleMultiplier(multiplier);
                return this;
            }
    

    如何使用:

    现在很简单,在您的活动中,当您使用 Builder 设置您的展示视图时,只需调用 setScaleMultiplier。

    例子:

    sv = new ShowcaseView.Builder(this, true)
                    .setTarget(target)
                    .setContentTitle(getResources().getString(R.string.welcome))
                    .setContentText(getResources().getString(R.string.welcomDescription))
                    .setStyle(R.style.MyTheme)
                    .setScaleMultiplier(0.3f)
                    .build();
    sv.Show();
    

    【讨论】:

      【解决方案2】:

      使用 setScaleMultiplier(float scaleMultiplier)

      希望能帮到你!

      【讨论】:

      • 好的。让我试试这个。我会回复你一点。顺便谢谢。如果这可行,我会接受你的回答。
      • 对我来说(v5)那个方法是私有的,你知道现在是怎么做的吗?
      • @TomHart, github.com/amlcurran/ShowcaseView/pull/176 目前它还没有被 amlcurran 合并
      猜你喜欢
      • 1970-01-01
      • 2020-10-28
      • 1970-01-01
      • 1970-01-01
      • 2020-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多