Je dois obtenir un indicateur de page dans le fichier de visualisation avec des images. Voici mon code.
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 );
}
}
Dans ce code, j'ai eu une erreur dans TitlePageIndicator indicator = (TitlePageIndicator)findViewById(R.id.indicat);
en tant que TitlePageIndicator cannot be resolved to a type
. Quelle est cette erreur? Comment puis-je le résoudre?
voici mon code 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>
Quel code dois-je écrire dans la variable TitlePageIndicator
? Je veux le faire sans utiliser de fragments .
Moi aussi j'ai créé une classe telle que:
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);
}
}
Est-ce que je voulais faire autre chose que ce cours?
Merci d'avance pour votre aide
Voici quelques choses à faire:
1-Téléchargez la bibliothèque si vous ne l'avez pas déjà fait.
2- Importer dans Eclipse.
3- Configurez votre projet pour utiliser la bibliothèque: Projet-> Propriétés -> Android -> Faites défiler l'écran jusqu'à la section Bibliothèque, cliquez sur Ajouter ... et sélectionnez viewpagerindicator.
4- Vous devriez maintenant pouvoir importer com.viewpagerindicator.TitlePageIndicator
.
Maintenant, pour implémenter ceci sans utiliser de fragments:
Dans l'exemple fourni avec viewpagerindicatior, vous pouvez voir que la bibliothèque est utilisée avec une ViewPager
qui a une FragmentPagerAdapter
.
Mais en réalité, la bibliothèque elle-même est Fragment
indépendante. Il faut juste une ViewPager
. Il suffit donc d’utiliser une PagerAdapter
au lieu de FragmentPagerAdapter
et vous voilà prêt à partir.
UPDATE: 22/03/2017
fragmentation principale:
<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>
configurez la vue et l'événement sur votre fragment comme ceci:
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);
}
État de la case à cocher personnalisée: Case à cocher personnalisée image Android
Tutoriel Viewpager: http://architects.dzone.com/articles/Android-tutorial-using
Je sais que la réponse à cette question a déjà été trouvée, mais pour quiconque recherche une implémentation simple et sans fioritures d'un indicateur ViewPager, j'en ai implémenté un que j'ai en source ouverte. Pour ceux qui trouvent la version de Jake Wharton un peu complexe pour leurs besoins, consultez https://github.com/jarrodrobins/SimpleViewPagerIndicator .
J'ai également utilisé SimpleViewPagerIndicator de @JROD. Il se bloque également comme décrit par @manuelJ.
Selon sa documentation:
SimpleViewPagerIndicator pageIndicator = (SimpleViewPagerIndicator) findViewById(R.id.page_indicator);
pageIndicator.setViewPager(pager);
Assurez-vous d'ajouter cette ligne également:
pageIndicator.notifyDataSetChanged();
Il se bloque avec une exception tableau hors limite, car SimpleViewPagerIndicator n'est pas instancié correctement et les éléments sont vides. L'appel de notifyDataSetChanged a pour résultat que toutes les valeurs sont correctement définies ou réinitialisées correctement.
Juste une amélioration de la réponse de Nice donnée par @ vuhung3990 . J'ai implémenté la solution et fonctionne très bien, mais si je touche un bouton radio, il sera sélectionné et rien ne se passera.
Je suggère de changer également de page quand un bouton radio est tapé. Pour ce faire, ajoutez simplement un auditeur au groupe 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;
}
}
});
vous devez faire ce qui suit:
1-Téléchargez le projet complet à partir d'ici https://github.com/JakeWharton/ViewPagerIndicatorIndicateur ViewPager 2- Importation dans Eclipse.
Après l’importation, si vous souhaitez créer le type d’écran suivant, suivez les étapes ci-dessous -
changer
Échantillons de cercles Par défaut
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);
}
}
ImageAdapter
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>
Vous pouvez créer une mise en page linéaire contenant un tableau de TextView (mDots) . Pour représenter le textView en tant que points, indiquez cette source HTML dans votre code . Référez-vous à mon code . J'ai obtenu ces informations sur la chaîne Youtube TVAC Studio . Voici le code: `
addDotsIndicator(0);
viewPager.addOnPageChangeListener(viewListener);
}
public void addDotsIndicator(int position)
{
mDots = new TextView[5];
mDotLayout.removeAllViews();
for (int i = 0; i<mDots.length ; i++)
{
mDots[i]=new TextView(this);
mDots[i].setText(Html.fromHtml("•")); //HTML for dots
mDots[i].setTextSize(35);
mDots[i].setTextColor(getResources().getColor(R.color.colorAccent));
mDotLayout.addView(mDots[i]);
}
if(mDots.length>0)
{
mDots[position].setTextColor(getResources().getColor(R.color.orange));
}
}
ViewPager.OnPageChangeListener viewListener = new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int
positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
addDotsIndicator(position);
}
@Override
public void onPageScrollStateChanged(int state) {
}
};`