5 ответов:
нам нужен: ViewPager,TabLayout и 2 drawables для выбранных и точек по умолчанию.
во-первых, мы должны добавить
TabLayoutк нашему макету экрана, и соедините его сViewPager. Мы можем сделать это двумя способами:
вложенные
TabLayoutнаViewPager<android.support.v4.view.ViewPager android:id="@+id/photos_viewpager" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.TabLayout android:layout_width="match_parent" android:layout_height="wrap_content"/> </android.support.v4.view.ViewPager>в этом случае
TabLayoutбудет автоматически связан сViewPager, аTabLayoutбудет рядом сViewPager, не более оно.
отдельные
TabLayout<android.support.v4.view.ViewPager android:id="@+id/photos_viewpager" android:layout_width="match_parent" android:layout_height="match_parent"/> <android.support.design.widget.TabLayout android:id="@+id/tab_layout" android:layout_width="match_parent" android:layout_height="wrap_content"/>в этом случае, мы можем положить
TabLayoutвезде, но мы должны подключитьсяTabLayoutСViewPagerпрограммноViewPager pager = (ViewPager) view.findViewById(R.id.photos_viewpager); PagerAdapter adapter = new PhotosAdapter(getChildFragmentManager(), photosUrl); pager.setAdapter(adapter); TabLayout tabLayout = (TabLayout) view.findViewById(R.id.tab_layout); tabLayout.setupWithViewPager(pager, true);как только мы создали наш макет, мы должны подготовить наши точки. Поэтому мы создаем три файла:
selected_dot.xml,default_dot.xmlиtab_selector.xml.
selected_dot.xml
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:innerRadius="0dp" android:shape="ring" android:thickness="8dp" android:useLevel="false"> <solid android:color="@color/colorAccent"/> </shape> </item> </layer-list>
default_dot.xml
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:innerRadius="0dp" android:shape="ring" android:thickness="8dp" android:useLevel="false"> <solid android:color="@android:color/darker_gray"/> </shape> </item> </layer-list>
tab_selector.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/selected_dot" android:state_selected="true"/> <item android:drawable="@drawable/default_dot"/> </selector>
теперь нам нужно добавить только 3 строки кода
TabLayoutв нашем XML-макете.app:tabBackground="@drawable/tab_selector" app:tabGravity="center" app:tabIndicatorHeight="0dp"
сначала создайте макет, в котором дайте один LinerLayout для точек, которые показывают над вашим пейджером просмотра
<RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v4.view.ViewPager android:id="@+id/view_pager" android:layout_width="match_parent" android:layout_height="wrap_content"/> <LinearLayout android:id="@+id/pager_dots" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_marginBottom="10dp" android:background="@android:color/transparent" android:gravity="center_horizontal" android:orientation="horizontal"> </LinearLayout> </RelativeLayout>после этого создайте 2 drawables
1. Невыбранные Выигрышного
<?xml version="1.0" encoding="utf-8"?> <shape android:shape="oval" xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="@android:color/transparent"/> <size android:width="12dp" android:height="12dp"/> <stroke android:width="1dp" android:color="#ffffff"/> </shape>2. Выбранный Выигрышного
<?xml version="1.0" encoding="utf-8"?> <shape android:shape="oval" xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="@android:color/transparent"/> <size android:width="12dp" android:height="12dp"/> <stroke android:width="1dp" android:color="#000000"/> </shape>после этого установите адаптер
private LinearLayout llPagerDots; private ViewPager viewPager; private ArrayList<String> eventImagesUrl; private HomeViewPagerAdapter homeViewPagerAdapter; private ImageView[] ivArrayDotsPager; public void setUpViewPager() { viewPager = (ViewPager) findViewById(R.id.view_pager); llPagerDots = (LinearLayout) findViewById(R.id.pager_dots); homeViewPagerAdapter = new HomeViewPagerAdapter(mContext, eventImagesUrl); viewPager.setAdapter(homeViewPagerAdapter); setupPagerIndidcatorDots(); ivArrayDotsPager[0].setImageResource(R.drawable.page_indicator_selected); viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { for (int i = 0; i < ivArrayDotsPager.length; i++) { ivArrayDotsPager[i].setImageResource(R.drawable.page_indicator_unselected); } ivArrayDotsPager[position].setImageResource(R.drawable.page_indicator_selected); } @Override public void onPageScrollStateChanged(int state) { } }); }создать метод setupPagerIndidcatorDots ():
private void setupPagerIndidcatorDots() { ivArrayDotsPager = new ImageView[eventImagesUrl.size()]; for (int i = 0; i < ivArrayDotsPager.length; i++) { ivArrayDotsPager[i] = new ImageView(getActivity()); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); params.setMargins(5, 0, 5, 0); ivArrayDotsPager[i].setLayoutParams(params); ivArrayDotsPager[i].setImageResource(R.drawable.page_indicator_unselected); //ivArrayDotsPager[i].setAlpha(0.4f); ivArrayDotsPager[i].setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { view.setAlpha(1); } }); llPagerDots.addView(ivArrayDotsPager[i]); llPagerDots.bringToFront(); }
Вы можете проверить мою библиотеку, чтобы обработать ваш запрос : https://github.com/tommybuonomo/dotsindicator
в вашем XML-макете
<com.tbuonomo.viewpagerdotsindicator.DotsIndicator android:id="@+id/dots_indicator" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" app:dotsColor="@color/colorPrimary" app:dotsSize="16dp" app:dotsWidthFactor="3" />в вашем коде Java
dotsIndicator = (DotsIndicator) findViewById(R.id.dots_indicator); viewPager = (ViewPager) findViewById(R.id.view_pager); adapter = new ViewPagerAdapter(); viewPager.setAdapter(adapter); dotsIndicator.setViewPager(viewPager);
ваш xml
<RelativeLayout android:id="@+id/rl_speed" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_above="@+id/ll_dashboard_buttons" android:layout_below="@+id/ib_menu"> <com.smart.gps.speedometer.app.utils.SmartViewPager android:id="@+id/view_pager" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> </com.smart.gps.speedometer.app.utils.SmartViewPager> <android.support.design.widget.TabLayout android:id="@+id/sliding_tabs" android:layout_alignParentBottom="true" android:layout_width="match_parent" android:layout_height="wrap_content" app:tabBackground="@drawable/tab_selector" app:tabIndicatorHeight="0dp" app:tabGravity="center" />создать drawable. щелкните правой кнопкой мыши на drawable -> new - > Drawable file resource назовите этот файл
tab_selector.xml
<item android:drawable="@drawable/selected_tab" android:state_selected="true"/> <item android:drawable="@drawable/unselected_tab"/>теперь есть еще два xml-файла. создайте еще два xml-файла с уважаемым именем. это индикатор selecter и невыбранный индикатор
selected_tab.xml
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:innerRadius="0dp" android:shape="ring" android:thickness="4dp" android:useLevel="false"> <solid android:color="@color/highspeed"/> </shape> </item> </layer-list>unselected_tab.xml
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:innerRadius="0dp" android:shape="ring" android:thickness="2dp" android:useLevel="false"> <solid android:color="@android:color/darker_gray"/> </shape> </item> </layer-list>
поместите ViewFlipper и viewFlipper_linear_dot_lay(Linearlayout) на samebaseline и следуйте ниже
viewFlipper_linear_dot_lay= (LinearLayout) findViewById(R.id.dots_lay); setupDotsOnViewPager(images_viewFlipper); for (int i = 0; i < images_viewFlipper.size(); i++) { //Add Images to ViewFlipper } private void setupDotsOnViewPager(ArrayList images_viewFlipper) { images_linear = new ImageView[images_viewFlipper.size()]; for (int i = 0; i < images_linear.length; i++) { images_linear[i] = new ImageView(this); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); params.setMargins(5, 0, 5, 0); params.gravity = Gravity.BOTTOM | Gravity.CENTER; images_linear[i].setLayoutParams(params); images_linear[i].setImageResource(R.drawable.unselected); viewFlipper_linear_dot_lay.addView(images_linear[i]); viewFlipper_linear_dot_lay.bringToFront(); } }и OnRight & OnLeft getsures поместите ниже код
for (int i = 0; i < images_linear.length; i++) { images_linear[i].setImageResource(R.drawable.unselected); } images_linear[viewFlipper.getDisplayedChild()].setImageResource(R.drawable.selected);

Comments