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