Страницы

Поиск по вопросам

вторник, 9 июля 2019 г.

Проблема с Transitions

Нужно реализовать вот такой эффект.

Но мне нужно не совсем так:
Верхняя часть 40%, нижняя - 60% высоты экрана. Между этими Layout находится FAB. При нажатии на него он перемещается в центр нижней части экрана, затем из центра появляется эффект ripple с помощью createCircularReveal(). И я начал делать
XML













scene1

android:clickable="true" android:onClick="startfab" app:elevation="0dp" app:backgroundTint="#d45d1e" android:src="@drawable/play" />

scene2



JAVA
public class FABScene extends AppCompatActivity { private LinearLayout shape; private Scene scene1, scene2;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.fabscene); Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar); shape = (LinearLayout)findViewById(R.id.viewMed); shape.setVisibility(View.INVISIBLE); setSupportActionBar(toolbar); setTitle(getIntent().getStringExtra("title")); ViewGroup sceneRoot = (ViewGroup) findViewById(R.id.scene_root); scene1 = Scene.getSceneForLayout(sceneRoot, R.layout.scene1, this); scene2 = Scene.getSceneForLayout(sceneRoot, R.layout.scene2, this);
}
public void end(View v){ Animator animator = ViewAnimationUtils.createCircularReveal(shape,shape.getWidth()/2,shape.getHeight()/2,(float) Math.hypot(shape.getWidth(), shape.getHeight()),0); animator.setInterpolator(new AccelerateDecelerateInterpolator()); animator.setDuration(1400); animator.addListener(new AnimatorListenerAdapter(){ @Override public void onAnimationEnd(Animator a){ shape.setVisibility(View.INVISIBLE); TransitionSet set = new TransitionSet(); set.addTransition(new ChangeBounds()); set.setDuration(3000); set.setInterpolator(new AccelerateInterpolator()); TransitionManager.go(scene1, set);
} }); animator.start(); }
public void startfab(View v){ TransitionSet set = new TransitionSet(); set.addTransition(new ChangeBounds()); set.setDuration(3000); set.setInterpolator(new AccelerateInterpolator()); set.addListener(new Transition.TransitionListener(){
@Override public void onTransitionStart(Transition p1) { } @Override public void onTransitionEnd(Transition p1) { Animator animator = ViewAnimationUtils.createCircularReveal(shape,shape.getWidth()/2,shape.getHeight()/2,0,(float) Math.hypot(shape.getWidth(), shape.getHeight())); shape.setVisibility(View.VISIBLE); animator.setInterpolator(new AccelerateDecelerateInterpolator()); animator.setDuration(1400); animator.start(); }
@Override public void onTransitionCancel(Transition p1) { // TODO: Implement this method }
@Override public void onTransitionPause(Transition p1) { // TODO: Implement this method }
@Override public void onTransitionResume(Transition p1) { // TODO: Implement this method }
}); TransitionManager.go(scene2, set);
} }
Не получается сделать, чтобы FAB была между двумя layout и перемещался на вторую сцену. Если поменять атрибуты высоты и ширины у FrameLayout (в котором первая сцена) на match_parent, то анимации происходят, но FAB находится в верхнем левом углу экрана. Что делать?


Ответ

Для того чтобы FloatingActionButton прикрепить к другой вью, надо использовать CoordinatorLayout и аттрибут app:layout_anchor. Как-то так:







Но, видимо, в этом случае сценой должен быть весь CoordinatorLayout.

Комментариев нет:

Отправить комментарий