2

私はちょうどConstraint Layoutを学び始めました。とてもクールです。私はConstraintSetをトピックにして立ち往生しました。ConstraintSetはどのくらい正確にAndroidのConstraintLayoutsで動作しますか?

私はConstraintSetの例を開発者向けドキュメントに見ましたが、私はそのアイデアを得ることができません。コードをそのまま実装していますが、実際にはわかりません。

異なるConstraintSetでの制約の働きについては、私が知りたいことばかりです。ここで

は私がやっていることです:

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/act_main" 
    tools:context="com.reversebits.constraintanimdemo.MainActivity"> 

    <TextView 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_marginEnd="8dp" 
     android:layout_marginStart="8dp" 
     android:text="Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum" 
     app:layout_constraintEnd_toStartOf="@+id/guideline2" 
     app:layout_constraintStart_toStartOf="parent" 
     app:layout_constraintTop_toTopOf="parent" 
     android:layout_marginTop="8dp" /> 

    <ImageView 
     android:id="@+id/imageView" 
     android:layout_width="0dp" 
     android:layout_height="160dp" 
     app:srcCompat="@mipmap/ic_launcher" 
     app:layout_constraintEnd_toEndOf="parent" 
     android:layout_marginEnd="8dp" 
     app:layout_constraintTop_toTopOf="parent" 
     android:layout_marginTop="8dp" 
     app:layout_constraintStart_toStartOf="@+id/guideline2" 
     android:layout_marginStart="8dp" /> 

    <android.support.constraint.Guideline 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/guideline" 
     android:orientation="vertical" 
     app:layout_constraintGuide_end="364dp" /> 

    <android.support.constraint.Guideline 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/guideline2" 
     android:orientation="vertical" 
     app:layout_constraintGuide_percent="0.5" /> 


    <Button 
     android:onClick="foo" 
     android:id="@+id/button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Button" 
     android:layout_marginBottom="8dp" 
     app:layout_constraintBottom_toBottomOf="parent" 
     app:layout_constraintEnd_toEndOf="parent" 
     android:layout_marginEnd="8dp" 
     android:layout_marginRight="8dp"/> 

</android.support.constraint.ConstraintLayout> 

clone.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.reversebits.constraintanimdemo.MainActivity"> 

    <TextView 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:text="Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum" 
     app:layout_constraintStart_toStartOf="parent" 
     android:layout_marginEnd="8dp" 
     app:layout_constraintEnd_toEndOf="parent" 
     android:layout_marginStart="8dp" 
     android:id="@+id/textView" 
     app:layout_constraintTop_toTopOf="parent" 
     android:layout_marginTop="8dp" /> 

    <ImageView 
     android:id="@+id/imageView" 
     android:layout_width="0dp" 
     android:layout_height="160dp" 
     app:srcCompat="@mipmap/ic_launcher" 
     app:layout_constraintEnd_toEndOf="parent" 
     android:layout_marginEnd="8dp" 
     app:layout_constraintStart_toStartOf="parent" 
     android:layout_marginStart="8dp" 
     app:layout_constraintBottom_toBottomOf="parent" 
     android:layout_marginBottom="8dp" 
     android:layout_marginTop="8dp" 
     app:layout_constraintTop_toBottomOf="@+id/textView" /> 

    <Button 
     android:onClick="foo" 
     android:id="@+id/button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Button" 
     android:layout_marginBottom="8dp" 
     app:layout_constraintBottom_toBottomOf="parent" 
     app:layout_constraintEnd_toEndOf="parent" 
     android:layout_marginEnd="8dp" 
     android:layout_marginRight="8dp"/> 

</android.support.constraint.ConstraintLayout> 

とMainActivityはここに行く:

import android.content.Context; 
import android.os.Build; 
import android.support.constraint.ConstraintLayout; 
import android.support.constraint.ConstraintSet; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.transition.TransitionManager; 
import android.view.View; 

public class MainActivity extends AppCompatActivity { 

    ConstraintSet mConstraintSet1 = new ConstraintSet(); // create a Constraint Set 
    ConstraintSet mConstraintSet2 = new ConstraintSet(); // create a Constraint Set 
    ConstraintLayout mConstraintLayout; // cache the ConstraintLayout 
    boolean mOld = true; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Context context = this; 
     mConstraintSet2.clone(context, R.layout.clone); // get constraints from layout 
     setContentView(R.layout.activity_main); 
     mConstraintLayout = (ConstraintLayout) findViewById(R.id.act_main); 
     mConstraintSet1.clone(mConstraintLayout); // get constraints from ConstraintSet 

    } 

    public void foo(View view) { 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
      TransitionManager.beginDelayedTransition(mConstraintLayout); 
     } 
     if (mOld = !mOld) { 
      mConstraintSet1.applyTo(mConstraintLayout); // set new constraints 
     } else { 
      mConstraintSet2.applyTo(mConstraintLayout); // set new constraints 
     } 
    } 
} 

答えて

0

のは、あなたがボタンをクリックした後、いくつかのビューを周りに移動したいとしましょう。たとえば、activity_main.xmlにレイアウトを定義し、その中にボタンを配置します。メインレイアウトのConstraintSetを取得するには、mConstraintSet1.clone(mConstraintLayout)が呼び出されます。セカンダリレイアウト(ボタンをクリックした後に表示するレイアウト)は、セカンダリレイアウトファイルclone.xmlから複製されます。そのレイアウトには、同じIDを持つ同じビューが含まれていますが、他の制約が適用されています。

ユーザーがボタンをクリックすると、foo()が実行されます。 foo()はアニメーションTransitionを開始してから、ConstraintSetConstraintLayoutに適用し、ビューを移動させます。 TransitionManagerコールのために、動きがアニメーション化されます。

関連する問題