studio programacion herramientas fundamentos con avanzado aplicaciones android android-viewpager android-view viewpagerindicator activity-indicator

programacion - Visor de páginas de Android con indicador de página



manual de android en pdf (6)

Necesito obtener el indicador de página en el archivo de paginación de la vista con imágenes. Aquí está mi código.

public class IndicatorActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); MyPagerAdapter adapter = new MyPagerAdapter(); ViewPager myPager = (ViewPager) findViewById(R.id.pager); myPager.setAdapter(adapter); myPager.setCurrentItem(0); TitlePageIndicator indicator = (TitlePageIndicator)findViewById(R.id.indicat); indicator.setViewPager( myPager ); } }

En este código, obtuve un error en el TitlePageIndicator indicator = (TitlePageIndicator)findViewById(R.id.indicat); como TitlePageIndicator cannot be resolved to a type . ¿Qué es este error. ¿Cómo puedo resolverlo?

Aquí está mi código xml:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="match_parent" /> <com.viewpagerindicator.TitlePageIndicator android:id="@+id/indicat" android:layout_height="wrap_content" android:layout_width="fill_parent" /> </LinearLayout>

¿Qué código necesito para escribir en TitlePageIndicator ? Quiero hacer esto sin usar fragmentos .

Yo también creé una clase como:

class MyPagerAdapter extends PagerAdapter { private static Integer[] titles = new Integer[] { R.drawable.jk,R.drawable.lm,R.drawable.no }; public int getCount() { return 3; } public Object instantiateItem(View collection, int position) { LayoutInflater inflater = (LayoutInflater) collection.getContext() .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View view; ImageView iv; view = inflater.inflate(R.layout.first, null); ((ViewPager) collection).addView(view, 0); switch (position) { case 0: iv = (ImageView)view.findViewById(R.id.imageView1); iv.setImageResource(titles[position]); break; case 1: iv = (ImageView)view.findViewById(R.id.imageView1); iv.setImageResource(titles[position]); break; case 2: iv = (ImageView)view.findViewById(R.id.imageView1); iv.setImageResource(titles[position]); break; } return view; } public void destroyItem(View arg0, int arg1, Object arg2) { ((ViewPager) arg0).removeView((View) arg2); } public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == ((View) arg1); } }

¿Quería hacer algo más que esta clase?

Gracias de antemano por la ayuda


Aquí hay algunas cosas que debes hacer:

1-Descarga la library si aún no lo has hecho.

2- Importar en Eclipse.

3- Configure su proyecto para usar la biblioteca: Proyecto-> Propiedades -> Android -> Desplácese hasta la sección Biblioteca, haga clic en Agregar ... y seleccione el indicador de indicador de vista.

4- Ahora debería poder importar com.viewpagerindicator.TitlePageIndicator .

Ahora acerca de implementar esto sin usar fragmentos:

En el ejemplo que viene con viewpagerindicatior , puede ver que la biblioteca se está utilizando con un ViewPager que tiene un FragmentPagerAdapter .

Pero, de hecho, la biblioteca en sí es un Fragment independiente. Solo necesita un ViewPager . Así que solo usa un PagerAdapter lugar de un FragmentPagerAdapter y listo.


Sé que esto ya ha sido respondido, pero para cualquiera que busque una implementación simple y sencilla de un indicador de ViewPager, he implementado uno que he abierto. Para cualquier persona que encuentre la versión de Jake Wharton un poco compleja para sus necesidades, eche un vistazo a https://github.com/jarrodrobins/SimpleViewPagerIndicator .


Solo una mejora a la buena respuesta dada por @ vuhung3990. Implementé la solución y funciona bien, pero si toco un botón de opción, se seleccionará y no pasará nada.

Sugiero cambiar también la página cuando se pulsa un botón de radio. Para hacer esto, simplemente agregue un oyente al grupo de radio:

mPager = (ViewPager) findViewById(R.id.pager); final RadioGroup radioGroup = (RadioGroup)findViewById(R.id.radiogroup); radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { switch (checkedId) { case R.id.radioButton : mPager.setCurrentItem(0, true); break; case R.id.radioButton2 : mPager.setCurrentItem(1, true); break; case R.id.radioButton3 : mPager.setCurrentItem(2, true); break; } } });


También he usado el SimpleViewPagerIndicator de @JROD. También se bloquea según lo descrito por @manuelJ.

Según su documentación:

SimpleViewPagerIndicator pageIndicator = (SimpleViewPagerIndicator) findViewById(R.id.page_indicator); pageIndicator.setViewPager(pager);

Asegúrate de agregar esta línea también:

pageIndicator.notifyDataSetChanged();

Se bloquea con una excepción de matriz fuera de límites porque el SimpleViewPagerIndicator no se crea correctamente y los elementos están vacíos. Al llamar a notifyDataSetChanged, todos los valores se configuran correctamente o, en su lugar, se restablecen correctamente.


Tienes que hacer lo siguiente:

1-Descargue el proyecto completo desde aquí https://github.com/JakeWharton/ViewPagerIndicator https://github.com/JakeWharton/ViewPagerIndicator 2- Importar en el Eclipse.

Después de importar, si desea realizar el siguiente tipo de pantalla, siga los pasos a continuación:

cambiar en

Muestra de círculos por defecto

package com.viewpagerindicator.sample; import android.os.Bundle; import android.support.v4.view.ViewPager; import com.viewpagerindicator.CirclePageIndicator; public class SampleCirclesDefault extends BaseSampleActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.simple_circles); mAdapter = new TestFragmentAdapter(getSupportFragmentManager()); mPager = (ViewPager)findViewById(R.id.pager); // mPager.setAdapter(mAdapter); ImageAdapter adapter = new ImageAdapter(SampleCirclesDefault.this); mPager.setAdapter(adapter); mIndicator = (CirclePageIndicator)findViewById(R.id.indicator); mIndicator.setViewPager(mPager); } }

Adaptador de imagen

package com.viewpagerindicator.sample; import android.content.Context; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; public class ImageAdapter extends PagerAdapter { private Context mContext; private Integer[] mImageIds = { R.drawable.about1, R.drawable.about2, R.drawable.about3, R.drawable.about4, R.drawable.about5, R.drawable.about6, R.drawable.about7 }; public ImageAdapter(Context context) { mContext = context; } public int getCount() { return mImageIds.length; } public Object getItem(int position) { return position; } public long getItemId(int position) { return position; } @Override public Object instantiateItem(ViewGroup container, final int position) { LayoutInflater inflater = (LayoutInflater) container.getContext() .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View convertView = inflater.inflate(R.layout.gallery_view, null); ImageView view_image = (ImageView) convertView .findViewById(R.id.view_image); TextView description = (TextView) convertView .findViewById(R.id.description); view_image.setImageResource(mImageIds[position]); view_image.setScaleType(ImageView.ScaleType.FIT_XY); description.setText("The natural habitat of the Niligiri tahr,Rajamala Rajamala is 2695 Mts above sea level" + "The natural habitat of the Niligiri tahr,Rajamala Rajamala is 2695 Mts above sea level" + "The natural habitat of the Niligiri tahr,Rajamala Rajamala is 2695 Mts above sea level"); ((ViewPager) container).addView(convertView, 0); return convertView; } @Override public boolean isViewFromObject(View view, Object object) { return view == ((View) object); } @Override public void destroyItem(ViewGroup container, int position, Object object) { ((ViewPager) container).removeView((ViewGroup) object); } }

gallery_view.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/about_bg" android:orientation="vertical" > <LinearLayout android:id="@+id/about_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:weightSum="1" > <LinearLayout android:id="@+id/about_layout1" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight=".4" android:orientation="vertical" > <ImageView android:id="@+id/view_image" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/about1"> </ImageView> </LinearLayout> <LinearLayout android:id="@+id/about_layout2" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight=".6" android:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="SIGNATURE LANDMARK OF MALAYSIA-SINGAPORE CAUSEWAY" android:textColor="#000000" android:gravity="center" android:padding="18dp" android:textStyle="bold" android:textAppearance="?android:attr/textAppearance" /> <ScrollView android:layout_width="fill_parent" android:layout_height="match_parent" android:fillViewport="false" android:orientation="vertical" android:scrollbars="none" android:layout_marginBottom="10dp" android:padding="10dp" > <TextView android:id="@+id/description" android:layout_width="match_parent" android:layout_height="match_parent" android:textColor="#000000" android:text="TextView" /> </ScrollView> </LinearLayout> </LinearLayout>


ACTUALIZACIÓN: 22/03/2017

Disposición principal del fragmento:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="match_parent" /> <RadioGroup android:id="@+id/page_group" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal|bottom" android:layout_marginBottom="@dimen/margin_help_container" android:orientation="horizontal"> <RadioButton android:id="@+id/page1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="true" /> <RadioButton android:id="@+id/page2" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <RadioButton android:id="@+id/page3" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RadioGroup> </FrameLayout>

configura la vista y el evento en tu fragmento de esta manera:

mViewPaper = (ViewPager) view.findViewById(R.id.viewpager); mViewPaper.setAdapter(adapder); mPageGroup = (RadioGroup) view.findViewById(R.id.page_group); mPageGroup.setOnCheckedChangeListener(this); mViewPaper.addOnPageChangeListener(this); ************************************************* ************************************************* @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { // when current page change -> update radio button state int radioButtonId = mPageGroup.getChildAt(position).getId(); mPageGroup.check(radioButtonId); } @Override public void onPageScrollStateChanged(int state) { } @Override public void onCheckedChanged(RadioGroup radioGroup, int checkedId) { // when checked radio button -> update current page RadioButton checkedRadioButton = (RadioButton)radioGroup.findViewById(checkedId); // get index of checked radio button int index = radioGroup.indexOfChild(checkedRadioButton); // update current page mViewPaper.setCurrentItem(index), true); }

Estado de la casilla de verificación personalizada : Imagen de la casilla de verificación personalizada Android

Tutorial de Viewpager: http://architects.dzone.com/articles/android-tutorial-using