4

ViewPager を実装したアプリを開発しています。ユーザーにスワイプして次の画面を表示させたいのです。私はフラグメントを実装しています。すべて順調ですが、もう 1 つ欲しいことがあります。現在アクティブな画面を示したい。タブのように。インターネットで検索しましたが、役立つものは何も見つかりませんでした。ありがとう。これが私のビューページャーアダプターとフラグメントアクティビティとxmlレイアウトです

import java.util.ArrayList;
import java.util.List;

import com.viewpagerindicator.TitlePageIndicator;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.widget.Toast;

public class MainActivity extends FragmentActivity implements OnPageChangeListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        List<Fragment> list = new ArrayList<Fragment>();
        list.add(MyFragment.newInstance("fragment 1"));
        list.add(MyFragment.newInstance("fragment 2"));
        list.add(MyFragment.newInstance("fragment 3"));
        MyPagerAdapter a = new MyPagerAdapter(getSupportFragmentManager(), list);
        ViewPager pager = (ViewPager) findViewById(R.id.viewpager);
        pager.setAdapter(a);

    }

    @Override
    public void onPageScrollStateChanged(int arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2) {
        // TODO Auto-generated method stub
    }

    @Override
    public void onPageSelected(int arg0) {
        // TODO Auto-generated method stub

    }


}

アダプタ.java

package com.example.fragments;

import java.util.List;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.PagerAdapter;
import android.view.View;

public class MyPagerAdapter extends FragmentPagerAdapter {
    List<Fragment> fragments;
    public MyPagerAdapter(FragmentManager fm,List<Fragment> f) {
        super(fm);
        this.fragments = f;
    }

    @Override
    public Fragment getItem(int arg0) {

        return fragments.get(arg0);
    }
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return fragments.size();
    }
}

main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >


    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_below="@+id/titles"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

</RelativeLayout>
4

3 に答える 3

5

このために、ページインジケーターを作成するクラスを作成しました

public class DotsScrollBar
{
    LinearLayout main_image_holder;
    public static void createDotScrollBar(Context context, LinearLayout main_holder,int selectedPage,int count)
    {
        for(int i=0;i<count;i++)
        {
            ImageView dot = null;
            dot= new ImageView(context);
            LinearLayout.LayoutParams vp = 
                new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, 
                                LayoutParams.WRAP_CONTENT);
            dot.setLayoutParams(vp);    
            if(i==selectedPage)
            {
                try {
                    dot.setImageResource(R.drawable.paging_h);
                } catch (Exception e) 
                {
                    Log.d("inside DotsScrollBar.java","could not locate identifier");
                }
            }else
            {
                dot.setImageResource(R.drawable.paging_n);
            }
            main_holder.addView(dot);
        }
        main_holder.invalidate();
    }
}

アクティビティ クラスで、createDotScrollBar以下のように関数を呼び出します。

public void updateIndicator(int currentPage) {
        dots_scrollbar_holder.removeAllViews();
        DotsScrollBar.createDotScrollBar(this, mDotsScrollbarHolder,
                mCurrentPage, totalNumberOfPages);
    }

内部で updateIndicator 関数を呼び出しますonPageScrollStateChanged

このような :

    @Override
        public void onPageScrollStateChanged(int state) {
            // TODO Auto-generated method stub
switch (state) {

        case 0:
    updateIndicator(mCurrentPage);
break;
        }

これでうまくいくことを願っています。

于 2013-06-14T11:52:17.027 に答える
2

ViewPager でのページ インジケーターの必要性に対応するライブラリを作成しました。私のライブラリには、DotIndicator というビューが含まれています。私のライブラリを使用するcompile 'com.matthew-tamlin:sliding-intro-screen:3.2.0'には、gradle ビルド ファイルに追加します。

以下を追加することで、ビューをレイアウトに追加できます。

    <com.matthewtamlin.sliding_intro_screen_library.indicators.DotIndicator
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:numberOfDots=YOUR_INT_HERE
            app:selectedDotIndex=YOUR_INT_HERE/>

上記のコードは、Google ランチャーのホーム画面のドットの機能を完全に再現していますが、さらにカスタマイズしたい場合は、次の属性を追加できます。

  • app:unselectedDotDiameterapp:selectedDotDiameterドットの直径を設定する
  • app:unselectedDotColorapp:selectedDotColorドットの色を設定する
  • app:spacingBetweenDotsドット間の距離を変更するには
  • app:dotTransitionDuration小さいものから大きいものへの変化 (およびその逆) をアニメートする時間を設定します。

さらに、ビューは以下を使用してプログラムで作成できます。

DotIndicator indicator = new DotIndicator(context);

属性と同様に、プロパティを変更するためのメソッドが存在します。別のページが選択されていることを示すようにインジケーターを更新するには、indicator.setSelectedItem(int, true)内部からメソッドを呼び出すだけViewPager.OnPageChangeListener.onPageSelected(int)です。

使用例を次に示します。

ここに画像の説明を入力

興味のある方は、このライブラリは実際には、上の gif に示されているような導入画面を作成するように設計されています。

ここで利用可能な Github ソース: https://github.com/MatthewTamlin/SlidingIntroScreen

于 2016-03-01T21:14:39.050 に答える