Страницы

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

воскресенье, 22 декабря 2019 г.

Выезжающий View

#android #android_layout #android_animation




Есть приложение с нижним тулбаром. Нужно сделать окно камеры, которое выезжает снизу
по нажатию на левую кнопку. Окно должно выезжать на 1/3 экрана, тулбар должен быть
над ним. Сделал камеру в SurfaceView. Как сделать выезжание?




    

    

        

        

        

        

    

    





    


Ответы

Ответ 1



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% поймете почему. Остальное вроде все по стандарту.

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

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