このような制約レイアウトのガイドラインがあります
<Android.support.constraint.Guideline
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:id="@+id/guideline8"
app:layout_constraintGuide_percent="0.5"
Android:orientation="vertical"/>
後でapp:layout_constraintGuide_percent
の値を条件付きで別の値に変更します。どうすればこれを達成できますか。
それを行うには2つの方法があります。
このメソッドは、
ConstraintLayout
から特定のパラメーターを取得して変更します。
Guideline guideLine = (Guideline) findViewById(R.id.your_guideline);
ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) guideLine.getLayoutParams();
params.guidePercent = 0.45f; // 45% // range: 0 <-> 1
guideLine.setLayoutParams(params);
ConstraintSet
の使用このメソッドは、
ConstraintLayout
属性のクローンを作成し、それらを変更してからView
に適用します。[〜#〜] but [〜#〜]それは非常に遅いです。
ConstraintLayout constraintLayout = (ConstraintLayout) findViewById(R.id.your_constraint_with_guideline);
ConstraintSet constraintSet = new ConstraintSet();
constraintSet.clone(constraintLayout);
constraintSet.setGuidelinePercent(R.id.your_guideline, 0.07f); // 7% // range: 0 <-> 1
TransitionManager.beginDelayedTransition(constraintLayout);
constraintSet.applyTo(constraintLayout);
これらのメソッドをテストするために、GuideLine
とScrollView
を使用して視差アニメーションを作成しました。
AndroidManifest.xml
、Activity
の中に、これを追加します:Android:hardwareAccelerated="true"
。
<activity
Android:name=".MainActivity"
Android:configChanges="keyboardHidden|orientation|screenSize"
Android:hardwareAccelerated="true">
...
MainActivity.Java
Guideline guideTopInfo;
ConstraintLayout constraintLayout;
ConstraintLayout.LayoutParams params;
ConstraintSet constraintSet;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
guideTopInfo = (Guideline) findViewById(R.id.guideline2);
constraintLayout = (ConstraintLayout) findViewById(R.id.constraint_root);
params = (ConstraintLayout.LayoutParams) guideTopInfo.getLayoutParams();
//constraintSet = new ConstraintSet();
//constraintSet.clone(constraintLayout);
final ScrollView scrollView = (ScrollView) findViewById(R.id.scroll_front);
scrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
@Override
public void onScrollChanged() {
float percentage = scrollView.getScrollY() * 0.0001f; // 0.001f faster // 0.00001f slower parallax animation
Log.d("mLog", String.valueOf(percentage));
if(percentage >= 0) {
// my XML percentage value was 12%
params.guidePercent = 0.12f - percentage; // up
//params.guidePercent = 0.12f + percentage; // downm
guideTopInfo.setLayoutParams(params);
//constraintSet.setGuidelinePercent(R.id.guideline2, 0.12f - percentage);
//TransitionManager.beginDelayedTransition(constraintLayout);
//constraintSet.applyTo(constraintLayout);
}
}
});
}
私の他の answer 誰かが興味を持っている場合の視差について。 ;)
このコードは、guidePercentを0に変更します
ConstraintLayout.LayoutParams lp = (ConstraintLayout.LayoutParams) guideline.getLayoutParams();
lp.guidePercent = 0;
guideline.setLayoutParams(lp);
コードでlayout_constraintGuide_percentを設定するには、ConstraintSetオブジェクトを使用する必要があります。
以下は、コードでlayout_constraintGuide_percentを設定するコードです。まず、制約セットオブジェクトを作成し、constraintlayoutを渡すcloneメソッドを呼び出してから、ガイドラインIDと比率を渡すsetGuidelinePercentを呼び出す必要があります。
ConstraintSet constraintSet = new ConstraintSet();
constraintSet.clone(constraintLayout);
constraintSet.setGuidelinePercent(R.id.guideline, 0.4f);
Kotlinおよびインサイドフラグメントまたはその他のアクティビティで、GuideLineアプリを設定します。関連するパラメーターには少し難易度がありますが、この方法で解決しました。
val view = inflate(this, R.layout.ly_custom_menu_item_wallet_side_menu, null)
val guideL = view.findViewById<Guideline>(R.id.guideline_wallet)
var constParam: ConstraintLayout.LayoutParams = guideL.layoutParams as ConstraintLayout.LayoutParams
constParam.guidePercent = 0.42f
guideL.layoutParams = constParam
これは、ly_custom_menu_item_wallet_side_menu.xmlレイアウト内のガイドライン要素です。
<androidx.constraintlayout.widget.Guideline
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:id="@+id/guideline_wallet"
Android:orientation="vertical"
app:layout_constraintGuide_end="84dp" />