Страницы

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

четверг, 15 ноября 2018 г.

Выезжающий View


Есть приложение с нижним тулбаром. Нужно сделать окно камеры, которое выезжает снизу по нажатию на левую кнопку. Окно должно выезжать на 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% поймете почему. Остальное вроде все по стандарту.

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

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