Страницы

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

понедельник, 9 декабря 2019 г.

Горизонтальная галерея с увеличением для Android

#java #android #scroll #gallery




Подскажите, как можно сделать такую галерею картинок для Android. Пробовал HorizontalScrollView,
PagerAdapter, CoverFlowCarousel, но эффекта не добился. Необходимо, чтобы на экране
было 3 элемента. Средний должен динамически увеличиваться. После прокрутки он должен
вставать по центру экрана
    


Ответы

Ответ 1



MainActivity.class public class MainActivity extends FragmentActivity{ static final int PAGE_COUNT = 7; ViewPager pager; PagerAdapter pagerAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); pager = (ViewPager) findViewById(R.id.pager); pagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager()); pager.setPageTransformer(true, new ZoomOutPageTransformer()); pager.setPageMargin(getResources().getDimensionPixelOffset(R.dimen.viewpager_margin)); pager.setAdapter(pagerAdapter); } private class MyFragmentPagerAdapter extends FragmentPagerAdapter { public MyFragmentPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { return PageFragment.newInstance(position); } @Override public int getCount() { return PAGE_COUNT; } } } PageFragment.class public class PageFragment extends Fragment { static final String PAGE_NUMBER_POSITION = "page_number_position"; static final String RED_COLOR = "#ff0608"; //каждый static final String ORANGE_COLOR = "#ff591c"; //охотник static final String YELLOW_COLOR = "#ffff1e"; //желает static final String GREEN_COLOR = "#33ff4f"; //знать static final String LIGHT_BLUE_COLOR = "#19e9ff"; //где static final String BLUE_COLOR = "#004cff"; //сидит static final String PURPLE_COLOR = "#df10ff"; //фазан int pageNumber; static PageFragment newInstance (int page) { PageFragment pageFragment = new PageFragment(); Bundle arguments = new Bundle(); arguments.putInt(PAGE_NUMBER_POSITION, page); pageFragment.setArguments(arguments); return pageFragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); pageNumber = getArguments().getInt(PAGE_NUMBER_POSITION); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View myView = inflater.inflate(R.layout.fragment1, null); TextView myTxt = (TextView) myView.findViewById(R.id.myTxt); myTxt.setAnimation(AnimationUtils.loadAnimation(getActivity(), android.R.anim.fade_in)); if (pageNumber == 0) {myTxt.setText("Каждый");myTxt.setBackgroundColor(Color.parseColor(RED_COLOR));} if (pageNumber == 1) {myTxt.setText("Охотник");myTxt.setBackgroundColor(Color.parseColor(ORANGE_COLOR));} if (pageNumber == 2) {myTxt.setText("Желает");myTxt.setBackgroundColor(Color.parseColor(YELLOW_COLOR));} if (pageNumber == 3) {myTxt.setText("Знать");myTxt.setBackgroundColor(Color.parseColor(GREEN_COLOR));} if (pageNumber == 4) {myTxt.setText("Где");myTxt.setBackgroundColor(Color.parseColor(LIGHT_BLUE_COLOR));} if (pageNumber == 5) {myTxt.setText("Сидит");myTxt.setBackgroundColor(Color.parseColor(BLUE_COLOR));} if (pageNumber == 6) {myTxt.setText("Фазан");myTxt.setBackgroundColor(Color.parseColor(PURPLE_COLOR));} return myView; } } activity_main.xml fragment1.xml dimens.xml 16dp 16dp -128dp 64dp Вот такой пример: Вкратце это обычный ViewPager, где мы играем c Margin, для того чтоб видеть "соседей". Остается проблема: когда мы создаем эти элементы при листинге смотрится не очень красиво, здесь мы всё скрываем двумя анимациями. Первая - стандартная взята из guidline google: ZoomOutPageTransformer вторая - тоже стандартная, для того чтоб элемент красиво (и незаметно) перерисовывался: android.R.anim.fade_in При изменении этих анимций на кастомные можно получить интересные эффекты, но не забудьте поставить соответствующие отступы в dimens.xml и enjoy)

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

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