Страницы

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

четверг, 13 июня 2019 г.

Как вынести часть активити за пределы экрана и оперировать ей?

Идея такая. Пользователь сдвигает активити пальцем вниз, после чего, становится виден скрытый за пределами экрана элемент и следует обработка события. Полагаю, будет правильным думать в сторону увеличения высоты активити больше 160dp и установки верхней точки отображения не с 0dp, а с той позиции, которая нам нужна.
На рисунке ниже всё схематично нарисовано. Тёмно-серым обозначена видимая часть экрана, активити обозначена малиновым. Изначально мы видим только часть активити и можем её двигать пальцем.

Как воплотить эту идею в жизнь?
UPD. Решил попробовать решить задачу через ScrollView. Взял пример из интернета. В примере существуют 3 кнопки, нажимаешь последнюю — контент съезжает на 200 пикселей.
import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.ScrollView;
/** * Created by promoscow on 12.05.17. */
public class ScrollViewDemoActivity extends Activity { Button buttonScrollUp, buttonScrollDown, buttonScrollToTop; ScrollView myScroll;
/** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.sc2);
buttonScrollUp = (Button) findViewById(R.id.scrollup); buttonScrollDown = (Button) findViewById(R.id.scrolldown); buttonScrollToTop = (Button) findViewById(R.id.scrolltotop); myScroll = (ScrollView) findViewById(R.id.myview); myScroll.scrollTo(0, 200);
buttonScrollUp.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub myScroll.scrollBy(0, 20); } });
buttonScrollDown.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub myScroll.scrollBy(0, 20); } });
buttonScrollToTop.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub myScroll.scrollTo(0, 200); } }); } }
Строчка myScroll.scrollTo(0, 200); смещает контент вниз на 200. Я добавляю её сразу после инициализации:
myScroll = (ScrollView) findViewById(R.id.myview); myScroll.scrollTo(0, 200);
Не работает!
UPD. Сработало с оборачиванием в Runnable:
myScroll.post(new Runnable(){ public void run(){ myScroll.scrollBy(0, 200); } });


Ответ

Поместить весь контент в ScrollView, а затем при создании активити сдвинуть позицию скролла
ScrollView sv = (ScrollView)findViewById(R.id.scroll); sv.scrollTo(..., ...);

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

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