查看具有碎片和指示器的寻呼机

时间:2013-06-14 11:41:11

标签: android

我正在开发一个应用程序,我已经实现了ViewPager我希望用户滑动并进入下一个屏幕。我正在实施片段。一切都很好,但我还想要一件事。我想指出哪个屏幕现在处于活动状态。就像标签一样。我在互联网上搜索但没有找到任何有用的东西。如果有一个想法是Appriciated。谢谢。 这是我的视图寻呼机适配器和片段活动以及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

    }


}

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

3 个答案:

答案 0 :(得分: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);
    }

并在onPageScrollStateChanged

中调用updateIndicator函数 像这样:

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

        case 0:
    updateIndicator(mCurrentPage);
break;
        }
希望这会成功。

答案 1 :(得分:5)

你基本上有三个选择:

1。使用android native PagerTitleStrip

实现起来非常简单,只需将其作为子项添加到xml中的ViewPager中,并将重力定义为TOP或BOTTOM,如下所示:

<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/pager"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

        <android.support.v4.view.PagerTitleStrip
            android:id="@+id/pager_title_strip"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom" />

    </android.support.v4.view.ViewPager>
</RelativeLayout>

但说实话,它看起来并不是很好,我不能说任何关于向后或向前的兼容性。以上在API 17中进行了测试

2。使用第三方库

喜欢疯狂ViewPagerIndictor from Jake Wharton

3。编写自己的实现

the answer from shruti中的建议相同。即使在这种情况下,虽然我建议你和Jake Whartons一起编写代码,但这真的很棒!

答案 2 :(得分: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 Launcher主屏幕上的点的功能,但是如果您想进一步自定义它,则可以添加以下属性:

  • app:unselectedDotDiameterapp:selectedDotDiameter设置点的直径
  • app:unselectedDotColorapp:selectedDotColor设置点的颜色
  • app:spacingBetweenDots更改点之间的距离
  • app:dotTransitionDuration设置动画更改从小到大(以及返回)的时间

此外,可以使用以下方式以编程方式创建视图:

DotIndicator indicator = new DotIndicator(context);

存在修改属性的方法,类似于属性。要更新指标以显示所选的其他网页,只需从indicator.setSelectedItem(int, true)内调用方法ViewPager.OnPageChangeListener.onPageSelected(int)

以下是使用中的示例:

enter image description here

如果您有兴趣,该库实际上是为了制作如上图所示的介绍屏幕。

Github来源:https://github.com/MatthewTamlin/SlidingIntroScreen

相关问题