반응형
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="ttsVm"
type="com.example.layoutpj.ui.tts.vm.TTSViewModel" />
<variable
name="frg"
type="com.example.layoutpj.ui.tts.TTSFragment" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/main_constraint"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/testbtn"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintTop_toBottomOf="@id/top_cover"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toTopOf="@id/btn_container"
android:background="@null"/>
<View
android:id="@+id/top_cover"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_constraintBottom_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:background="@color/sunflower_green_300"/>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/btn_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="parent"
android:focusable="true"
android:paddingTop="20dp">
<ImageView
android:id="@+id/tts_btn_1"
android:layout_width="50dp"
android:layout_height="50dp"
android:background="@color/sunflower_yellow_300"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toTopOf="@id/tv_positon_count"
app:layout_constraintHorizontal_chainStyle="spread"
app:layout_constraintEnd_toStartOf="@id/tts_btn_2"
android:layout_marginBottom="20dp"/>
<ImageView
android:id="@+id/tts_btn_2"
android:layout_width="50dp"
android:layout_height="50dp"
android:background="@color/sunflower_white"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toEndOf="@id/tts_btn_1"
app:layout_constraintBottom_toBottomOf="@id/tts_btn_1"
app:layout_constraintEnd_toStartOf="@id/tts_btn_3"/>
<ImageView
android:id="@+id/tts_btn_3"
android:layout_width="50dp"
android:layout_height="50dp"
android:background="@color/sunflower_green_500"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toEndOf="@id/tts_btn_2"
app:layout_constraintBottom_toBottomOf="@id/tts_btn_1"
app:layout_constraintEnd_toStartOf="@id/tts_btn_4"/>
<ImageView
android:id="@+id/tts_btn_4"
android:layout_width="50dp"
android:layout_height="50dp"
android:background="@color/sunflower_black"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toEndOf="@id/tts_btn_3"
app:layout_constraintBottom_toBottomOf="@id/tts_btn_1"
app:layout_constraintEnd_toStartOf="@id/tts_btn_5"/>
<ImageView
android:id="@+id/tts_btn_5"
android:layout_width="50dp"
android:layout_height="50dp"
android:background="@color/sunflower_yellow_300"
app:layout_constraintStart_toEndOf="@id/tts_btn_4"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="@id/tts_btn_1"
app:layout_constraintEnd_toEndOf="parent" />
<TextView
android:id="@+id/tv_positon_count"
android:layout_width="match_parent"
android:layout_height="50dp"
android:textAppearance="@style/TextAppearance.MaterialComponents.Headline6"
android:textColor="@color/black"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:text="@{String.valueOf(ttsVm.currentPosition)}"
android:background="@color/white"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
- top_cover와 btn_container를 위아래로 숨기고 보이고 할것이다.
val constraintSet1 = ConstraintSet()
val constraintSet2 = ConstraintSet()
private fun initAnim(){
//바뀔 layout
constraintSet2.clone(binding.mainConstraint)
constraintSet2.clear(R.id.btn_container,ConstraintSet.TOP)
constraintSet2.clear(R.id.btn_container,ConstraintSet.BOTTOM)
constraintSet2.connect(R.id.btn_container,ConstraintSet.TOP,ConstraintSet.PARENT_ID,ConstraintSet.BOTTOM)
constraintSet2.clear(R.id.top_cover,ConstraintSet.BOTTOM)
constraintSet2.clear(R.id.top_cover,ConstraintSet.TOP)
constraintSet2.connect(R.id.top_cover,ConstraintSet.BOTTOM,ConstraintSet.PARENT_ID,ConstraintSet.TOP)
//원본 layout
constraintSet1.clone(binding.mainConstraint)
constraintSet1.clear(R.id.btn_container,ConstraintSet.BOTTOM)
constraintSet1.clear(R.id.btn_container,ConstraintSet.TOP)
constraintSet1.connect(R.id.btn_container,ConstraintSet.BOTTOM,ConstraintSet.PARENT_ID,ConstraintSet.BOTTOM)
constraintSet1.clear(R.id.top_cover,ConstraintSet.TOP)
constraintSet1.clear(R.id.top_cover,ConstraintSet.BOTTOM)
constraintSet1.connect(R.id.top_cover,ConstraintSet.TOP,ConstraintSet.PARENT_ID,ConstraintSet.TOP)
}
- clone 대상은 parent view의 constraint
- 이전 제약조건을 제거한뒤 ( clear ) 새 제약조건을 준다 ( connect )
var isChange = true
private fun toggleAnim(){
val at = ChangeBounds()
at.addListener(object :Transition.TransitionListener{
override fun onTransitionStart(transition: Transition) {
}
override fun onTransitionEnd(transition: Transition) {
Log.e("asdf","go")
(requireActivity() as TTSMainActivity).toggle()
}
override fun onTransitionCancel(transition: Transition) {}
override fun onTransitionPause(transition: Transition) {}
override fun onTransitionResume(transition: Transition) {}
})
TransitionManager.beginDelayedTransition(binding.mainConstraint,at)
val ctr = if (isChange) constraintSet1 else constraintSet2
ctr.applyTo(binding.mainConstraint)
isChange = !isChange
}
반응형
'AOS' 카테고리의 다른 글
(안드로이드) timer (0) | 2021.06.16 |
---|---|
(안드로이드) git 꼬엿을때. (0) | 2021.06.02 |
(Android) 트위치 App 3 - retrofit2 (0) | 2021.04.19 |
(Android) 트위치 app 2 - ANR WatchDog (0) | 2021.04.16 |
(안드로이드)채팅 구현하기 (0) | 2021.01.14 |