我有这样的约束布局指南

<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值更改为其他值。我怎么能做到这一点。

最佳答案

有两种方法可以做到这一点:

  • 使用 ConstraintLayout.LayoutParams

  • 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 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);
    

    创建视差效果
    为了测试这些方法,我在顶部使用GuideLineScrollView创建了视差动画。
    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。 ;)

    关于android - 以编程方式更改约束布局中的准则百分比,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41085338/

    10-10 18:10