ショーケース ビューでタイトルとメッセージの位置を設定する方法はありますか? ライブラリが関数を使用して最適な位置を見つけているようですが、それをオーバーライドしたいと思います。
質問する
3553 次
1 に答える
8
ソースコードを掘り下げたところShowcaseView
、テキストの位置を設定する方法が組み込まれていないようです。そのため、独自の変更をライブラリに追加しました。ここに私が行った変更があります:
クラスShowcaseView
に次のフィールドが追加されました。
private boolean hasManualPostion = false;
private int xPosition, yPosition, width;
次に、クラスのBuilder
内部クラスであるShowcaseView
クラスで、これらのメソッドを追加します。
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;
}
最後にonPreDraw
メソッドを次のShowcaseView
ように変更します。
@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();
楽しみ!
于 2014-08-15T05:51:20.070 に答える