Android ShowCaseView圆形大小

Android ShowCaseView圆形大小,android,showcaseview,Android,Showcaseview,是否可以在ShowCaseView中更改圆圈的当前大小 我的代码中包含以下内容: ShowcaseView.ConfigOptions co = new ShowcaseView.ConfigOptions(); co.hideOnClickOutside = false; return ShowcaseView.insertShowcaseView(id, activity, title, message, co); 但现在,我只是显示Show

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

我的代码中包含以下内容:

ShowcaseView.ConfigOptions co = new ShowcaseView.ConfigOptions();
            co.hideOnClickOutside = false;
            return ShowcaseView.insertShowcaseView(id, activity, title, message, co);
但现在,我只是显示ShowCaseView的默认大小,如果是这样,我如何调整它的大小

谢谢

有关ShowCaseView的更多信息,请参阅。。

使用setScaleMultiplier(浮点比例乘法器)

希望能帮助你

使用setScaleMultiplier(浮点缩放多路复用器)


希望能帮助你

我找到了方法,我们必须在代码中做一些更改。 我是在当前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 {
在此生成器类中,添加以下方法:

 public Builder setScaleMultiplier(float multiplier){
            showcaseView.setScaleMultiplier(multiplier);
            return this;
        }
如何使用它:

现在非常简单,在您的活动中,当您使用Builder设置showcaseview时,只需调用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();

我发现如何做到这一点,我们必须在代码中做一些更改。 我是在当前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 {
在此生成器类中,添加以下方法:

 public Builder setScaleMultiplier(float multiplier){
            showcaseView.setScaleMultiplier(multiplier);
            return this;
        }
如何使用它:

现在非常简单,在您的活动中,当您使用Builder设置showcaseview时,只需调用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();

好啊让我试试这个。我会再找你的。顺便说一下,谢谢。如果这能奏效,我会接受你的答案。对我来说(v5)这个方法是私有的,你知道它现在是怎么做的吗?@TomHart,因为现在它还没有被amlcurranOk合并。让我试试这个。我会再找你的。顺便说一下,谢谢。如果这能奏效,我会接受你的答案。对我来说(v5)这个方法是私有的,你知道它现在是怎么做的吗?@TomHart,因为现在它还没有被amlcurran合并