【问题标题】:Showcase View text gravity陈列柜视图文字重力
【发布时间】:2013-10-12 09:39:30
【问题描述】:

有没有办法在 Showcase 视图中设置 Title 和 Message 的位置?我看到库使用函数来查找最佳位置,但我想覆盖它。

【问题讨论】:

标签: android textview showcaseview


【解决方案1】:

我刚刚深入研究了ShowcaseView 源代码,似乎没有内置方法来设置文本位置。所以我将自己的修改添加到库中。以下是我所做的更改:

ShowcaseView 类中添加了这些字段:

private boolean hasManualPostion = false;
private int xPosition, yPosition, width;

然后在ShowcaseView类的内部类Builder类中,添加这些方法:

        public Builder hasManualPosition(boolean hasManualPosition) {
        showcaseView.hasManualPostion = hasManualPosition;
        return this;
    }

    public Builder xPostion(int xPostion) {
        showcaseView.xPosition = xPostion;
        return this;
    }

    public Builder yPostion(int yPostion) {
        showcaseView.yPosition = yPostion;
        return this;
    }

之后,将此方法添加到TextDrawer 类中:

public void setTestPostionManually(int xPosition, int yPosition) {
    mBestTextPosition[0] = xPosition;
    mBestTextPosition[1] = yPosition;
}

最后将ShowcaseView 中的onPreDraw 方法更改为如下所示:

    @Override
public boolean onPreDraw() {
    boolean recalculatedCling = showcaseAreaCalculator.calculateShowcaseRect(showcaseX, showcaseY, showcaseDrawer);
    boolean recalculateText = recalculatedCling || hasAlteredText;
    if (recalculateText) {
        textDrawer.calculateTextPosition(getMeasuredWidth(), getMeasuredHeight(), this, shouldCentreText);
        if (hasManualPostion) {
            textDrawer.setTestPostionManually(xPosition, yPosition);
        }
    }
    hasAlteredText = false;
    return true;
}

现在你应该像这样创建ShowcaseView

sv = new ShowcaseView.Builder(this, true)
                .setTarget(target)
                .setContentTitle(R.string.showcase_main_title)
                .setContentText(R.string.showcase_main_message)
                .setStyle(R.style.CustomShowcaseTheme2)
                .setShowcaseEventListener(this)
                .hasManualPosition(true)
                .xPostion(0)
                .yPostion(240)
                .build();

享受吧!

【讨论】:

  • 这是哪个版本?知道如何让它在旧版中工作吗?
  • 修改为5.0.0版本
  • 你知道在 5.0.0 中引入手部动画的方法吗?
  • 你不能把它传递给onPreDraw...你怎么写这样的东西而不测试它,然后把它交给提问者
  • @Odaym 可能在他编写代码时没有CalculateTextOnPreDraw 类(现在包含onPreDraw 方法)。现在,您只需将this 替换为ShowcaseView.this 即可完美运行。
猜你喜欢
  • 1970-01-01
  • 2011-11-29
  • 1970-01-01
  • 2021-12-26
  • 1970-01-01
  • 2015-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多