我正在开发一个应用程序,我已经实现了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>
答案 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
@Override
public void onPageScrollStateChanged(int state) {
// TODO Auto-generated method stub
switch (state) {
case 0:
updateIndicator(mCurrentPage);
break;
}
希望这会成功。
答案 1 :(得分:5)
你基本上有三个选择:
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中进行了测试
喜欢疯狂好ViewPagerIndictor from Jake Wharton
与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:unselectedDotDiameter
和app:selectedDotDiameter
设置点的直径app:unselectedDotColor
和app:selectedDotColor
设置点的颜色app:spacingBetweenDots
更改点之间的距离app:dotTransitionDuration
设置动画更改从小到大(以及返回)的时间此外,可以使用以下方式以编程方式创建视图:
DotIndicator indicator = new DotIndicator(context);
存在修改属性的方法,类似于属性。要更新指标以显示所选的其他网页,只需从indicator.setSelectedItem(int, true)
内调用方法ViewPager.OnPageChangeListener.onPageSelected(int)
。
以下是使用中的示例:
如果您有兴趣,该库实际上是为了制作如上图所示的介绍屏幕。
Github来源:https://github.com/MatthewTamlin/SlidingIntroScreen