web-dev-qa-db-ja.com

Androidページインジケータでページャーを表示

ビューページャーファイルに画像付きのページインジケーターを取得する必要があります。これが私のコードです。

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

このコードでは、TitlePageIndicator indicator = (TitlePageIndicator)findViewById(R.id.indicat);で_TitlePageIndicator cannot be resolved to a type_としてエラーが発生しました。このエラーは何ですか。どうすれば解決できますか?

ここに私の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>
_

TitlePageIndicatorに書き込む必要があるコードは何ですか? フラグメントを使用せずにこれを行いたい

私は次のようなクラスも作成しました:

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

    }

}
_

このクラス以上のことをしたいですか?

助けてくれてありがとう

27
user1602259

実行する必要があるいくつかのことを次に示します。

1 library をまだダウンロードしていない場合はダウンロードします。

2- Eclipseにインポートします。

3-ライブラリを使用するようにプロジェクトを設定します:Project-> Properties-> Android-> Libraryセクションまでスクロールダウンし、Add ...およびviewpagerindicatorを選択します。

4-これで、com.viewpagerindicator.TitlePageIndicatorをインポートできるはずです。

フラグメントを使用せずにこれを実装することについて:

viewpagerindicatiorに付属するサンプルでは、​​ViewPagerを持つFragmentPagerAdapterでライブラリが使用されていることがわかります。 。

しかし実際には、ライブラリ自体はFragment独立です。必要なのはViewPagerだけです。したがって、PagerAdapterの代わりにFragmentPagerAdapterを使用するだけで、準備完了です。

12
Benito Bertoli

更新:22/03/2017

メインフラグメントレイアウト:

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

次のようにフラグメントにビューとイベントを設定します。

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

カスタムチェックボックスの状態: カスタムチェックボックス画像Android

ビューページャーのチュートリアル: http://architects.dzone.com/articles/Android-tutorial-using

enter image description here

53
vuhung3990

これはすでに回答されていますが、ViewPagerインジケーターのシンプルで飾り気のない実装を探している人のために、私はオープンソースの実装を実装しました。 Jake Whartonのバージョンがニーズに対して少し複雑だと思う人は、 https://github.com/jarrodrobins/SimpleViewPagerIndicator をご覧ください。

9
JRod

@JRODのSimpleViewPagerIndicatorも使用しました。また、@ manuelJの説明に従ってクラッシュします。

彼の文書によると:

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

この行も必ず追加してください。

pageIndicator.notifyDataSetChanged();

SimpleViewPagerIndicatorが適切にインスタンス化されておらず、アイテムが空であるため、配列の範囲外例外でクラッシュします。 notifyDataSetChangedを呼び出すと、すべての値が適切に設定されるか、適切にリセットされます。

5
Terence

@ vuhung3990によって与えられたニースの答えを改善しただけです。ソリューションを実装し、うまく機能しますが、1つのラジオボタンをタッチすると選択され、何も起こりません。

ラジオボタンがタップされたときにもページを変更することをお勧めします。これを行うには、単にradioGroupにリスナーを追加します。

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

あなたは次のことをしなければなりません:

1-完全なプロジェクトをここからダウンロードします https://github.com/JakeWharton/ViewPagerIndicatorViewPager Indicator 2- Eclipseにインポートします。

インポート後、次のタイプの画面を作成する場合は、以下の手順に従います-

Screen Shot

変化する

サンプルサークルデフォルト

  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

TextView(mDots)の配列を含む線形レイアウトを作成できます。 textViewをドットとして表すには、コードでこのHTMLソースを提供します。私のコードを参照してください。 Youtube Channel TVAC Studioからこの情報を得ました。ここにコード: `

    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