webentwicklung-frage-antwort-db.com.de

Android-Ansicht-Pager mit Seitenanzeige

Ich muss einen Seitenindikator in der Ansichts-Pager-Datei mit Bildern erhalten. Hier ist mein 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 );
    }
}

In diesem Code habe ich einen Fehler in TitlePageIndicator indicator = (TitlePageIndicator)findViewById(R.id.indicat); als TitlePageIndicator cannot be resolved to a type erhalten. Was ist dieser Fehler? Wie kann ich es beheben?

hier ist mein XML-Code:

<?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>

Welchen Code muss ich in TitlePageIndicator schreiben? Ich möchte dies ohne Fragmente tun.

Ich erstellte auch eine Klasse wie:

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);

    }

}

Wollte ich mehr als diese Klasse tun?

Vielen Dank im Voraus für die Hilfe

26
user1602259

Hier sind einige Dinge, die Sie tun müssen:

1-Laden Sie die -Bibliothek herunter , falls Sie dies noch nicht getan haben.

2- Import in Eclipse.

3- Legen Sie Ihr Projekt für die Verwendung der Bibliothek fest: Projekt -> Eigenschaften -> Android -> Blättern Sie nach unten zum Abschnitt Bibliothek, klicken Sie auf Hinzufügen ... und wählen Sie Ansichtsanzeige.

4- Jetzt sollten Sie com.viewpagerindicator.TitlePageIndicator importieren können.

Nun zur Implementierung ohne Fragmente:

In dem Beispiel, das mit viewpagerindicatior geliefert wird, können Sie sehen, dass die Bibliothek mit einer ViewPager verwendet wird, die eine FragmentPagerAdapter hat.

Tatsächlich ist die Bibliothek selbst Fragment unabhängig. Es braucht nur eine ViewPager. Verwenden Sie also eine PagerAdapter anstelle einer FragmentPagerAdapter und schon können Sie loslegen.

12
Benito Bertoli

UPDATE: 22.03.2017

hauptfragmentlayout:

       <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>

richten Sie Ansicht und Ereignis wie folgt auf Ihrem Fragment ein:

        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);
    }

status des benutzerdefinierten Kontrollkästchens: Benutzerdefiniertes Kontrollkästchen image Android

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

enter image description here

53
vuhung3990

Ich weiß, dass dies bereits beantwortet wurde, aber für jeden, der nach einer einfachen Implementierung eines ViewPager-Indikators sucht, der einfach und ohne Schnickschnack funktioniert, habe ich einen implementiert, den ich als Open Source verwendet habe. Für alle, die Jake Whartons Version für ihre Anforderungen etwas komplex finden, schauen Sie unter https://github.com/jarrodrobins/SimpleViewPagerIndicator nach.

9
JRod

Ich habe auch den SimpleViewPagerIndicator von @JROD verwendet. Es stürzt auch ab, wie von @manuelJ beschrieben.

Nach seiner Dokumentation:

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

Stellen Sie sicher, dass Sie auch diese Zeile hinzufügen:

pageIndicator.notifyDataSetChanged();

Es stürzt mit einer Ausnahme außerhalb des Bereichs ab, da SimpleViewPagerIndicator nicht ordnungsgemäß instanziiert wird und die Elemente leer sind. Das Aufrufen von notifyDataSetChanged führt dazu, dass alle Werte richtig gesetzt oder korrekt zurückgesetzt werden.

5
Terence

Nur eine Verbesserung der Nice-Antwort von @ vuhung3990 . Ich habe die Lösung implementiert und funktioniert großartig, aber wenn ich ein Optionsfeld berühre, wird es ausgewählt und nichts passiert.

Ich empfehle, auch die Seite zu wechseln, wenn ein Optionsfeld angetippt wird. Fügen Sie dazu einfach einen Listener zur RadioGroup hinzu:

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;
                }
            }
        });
2
Andrea

du musst folgendes tun:

1-Laden Sie das vollständige Projekt von hier aus herunter https://github.com/JakeWharton/ViewPagerIndicatorViewPager Indicator

Wenn Sie nach dem Importieren den folgenden Bildschirmtyp erstellen möchten, führen Sie die folgenden Schritte aus:

Screen Shot

verändern in 

Beispielkreise Standard

  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>

1
gAuRaV jAiN

Sie können ein lineares Layout erstellen, das ein Array von TextView (mDots) enthält. Um die Textansicht als Punkte darzustellen, stellen Sie diesen HTML-Quellcode in Ihrem Code zur Verfügung. Verweisen Sie auf meinen Code. Ich habe diese Informationen vom Youtube Channel TVAC erhalten Studio . Hier der 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("&#8226;"));            //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) {

    }
};`
0
Rohan Bari