Есть приложение с нижним тулбаром. Нужно сделать окно камеры, которое выезжает снизу по нажатию на левую кнопку. Окно должно выезжать на 1/3 экрана, тулбар должен быть над ним. Сделал камеру в SurfaceView. Как сделать выезжание?
Ответ
Camera_Activity.class
public class Camera_Activity extends AppCompatActivity {
ImageButton btn_camera;
ImageButton btn_mic;
SurfaceView sv;
LinearLayout show_video;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.anim_footer);
show_video = (LinearLayout) findViewById(R.id.show_video);
btn_camera = (ImageButton) findViewById(R.id.btn_camera);
btn_mic = (ImageButton) findViewById(R.id.btn_mic);
sv = (SurfaceView) findViewById(R.id.camera_view);
btn_camera.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (sv.getVisibility() == View.GONE) {
sv.setVisibility(View.VISIBLE);
final Animation show = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.show_video);
show_video.startAnimation(show);
}
}
});
btn_mic.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (sv.getVisibility() == View.VISIBLE) {
final Animation hide = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.hide_video);
hide.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
sv.setVisibility(View.GONE);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
show_video.startAnimation(hide);
}
}
});
}
}
anim_footer.xml
Две анимации:
show_video.xml
hide_video.xml
Результат:
Я старался по мин. задеть Вашу разметку, получается что добавился только LinerLayout, как контейнер для всего этого дела внизу. Иконки стандартные.
В целом в коде особого нет ничего, но один момент я думаю стоит объяснить.
Анимация translate: так как панелька у нас всегда видна, поэтому требуется выдвигать панель меньше на этот размер, но его подсчитать не будет сложности, даже если динамически будет меняться, просто придется анимацию переписывать программно. Да и в одной из анимации 1% больше, это фича, чтоб старт казался плавней, можете поставить на 85% поймете почему. Остальное вроде все по стандарту.
Комментариев нет:
Отправить комментарий