在操作栏选项卡中添加页面卷曲

时间:2014-11-18 04:44:22

标签: android curl android-actionbar android-viewpager

我看到很多与页面卷曲有关的github。我在下面提到了它:

  1. harism
  2. openaphid
  3. mediafire
  4. MysticTreeGames
  5. 但是一切都与Images有关。它不适合我。我需要在Action栏标签中实现页面卷曲。

    对于例如:我在动作栏标签中发布了下面的示例图片,用于页面卷曲。

    enter image description here

    下面我发布了操作栏标签的代码:

    MainActivity.java:

      public class MainActivity extends FragmentActivity implements
            ActionBar.TabListener {
    
        private ViewPager viewPager;
        private TabsPagerAdapter mAdapter;
        private ActionBar actionBar;
      private MenuItem menuItem;
    
        // Tab titles
        private String[] tabs = { "Top Rated", "Games", "Movies" };
    
        @SuppressLint("NewApi")
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
       viewPager = (ViewPager) findViewById(R.id.pager);
            actionBar = getActionBar();
            mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
    
            viewPager.setAdapter(mAdapter);
            actionBar.setHomeButtonEnabled(false);
            actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    
            actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME
                    | ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_SHOW_CUSTOM);
    
            // Adding Tabs
            for (String tab_name : tabs) {
                actionBar.addTab(actionBar.newTab().setText(tab_name)
                        .setTabListener(this));
            }
    
        viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    
                @Override
                public void onPageSelected(int position) {
                    // on changing the page
                    // make respected tab selected
                    actionBar.setSelectedNavigationItem(position);
                }
    
                @Override
                public void onPageScrolled(int arg0, float arg1, int arg2) {
                }
    
                @Override
                public void onPageScrollStateChanged(int arg0) {
                }
            });
    
        }
    
    @Override
        public void onTabReselected(Tab tab, FragmentTransaction ft) {
        }
    
        @Override
        public void onTabSelected(Tab tab, FragmentTransaction ft) {
            // on tab selected
            // show respected fragment view
            viewPager.setCurrentItem(tab.getPosition());
        }
    
        @Override
        public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        }
    
    }
    

    activity_main.xml中:

    <?xml version="1.0" encoding="utf-8"?>
    
      <android.support.v4.view.ViewPager
            android:id="@+id/pager"
            android:layout_width="match_parent"
            android:layout_height="match_parent" >
        </android.support.v4.view.ViewPager>
    

    TopRatedFragment.java:

    public class TopRatedFragment extends Fragment {
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
    
            View rootView = inflater.inflate(R.layout.fragment_top_rated, container, false);
    
            return rootView;
        }
    }
    

    fragment_top_rated.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#fa6a6a"
        android:orientation="vertical" >
    
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:gravity="center"
            android:text="Design Top Rated Screen"
            android:textSize="20dp" />
    
    </RelativeLayout>
    

    已编辑:我已在Action bar tabs中尝试过了。但它在“活动”中工作而非“片段”(操作栏标签)。

    如果我在操作栏选项卡中获得了一些教程或github或一些示例或任何其他与实现页面卷曲相关的建议。这对我有帮助。谢谢。

2 个答案:

答案 0 :(得分:1)

如果您可以将想要页面卷曲的内容添加到View实例中,那么如果将视图渲染到位图上,则可能会使用任何使用Bitmap实例的卷曲效果。可以使用这样的方法:

public Bitmap renderViewAsBitmap( View view ) {
    view.setDrawingCacheEnabled( true );
    view.buildDrawingCache();
    return view.getDrawingCache();
}

或者,如果您想在卷曲效果之前对图像进行更多操作:

public Bitmap renderViewAsBitmap( View view, int width, int height ) {
    Bitmap bitmap = Bitmap.createBitmap( width, height, Bitmap.Config.ARGB_8888 );
    Canvas canvas = new Canvas( bitmap );
    view.draw( canvas );
    return bitmap;
}

布局可以

我会尝试编写一个测试用例,使用操作栏标签作为参考,并使用更多示例代码编辑此答案。

答案 1 :(得分:0)

股票android选项卡属于Actionbar。它们呈现在主片段(Actionbar下方的片段)之外。由于您在片段中应用了卷曲效果,因此您永远不会在标签中看到它。

我建议您使用模拟操作栏标签相同行为的库(例如PageSlidingTabStrip),这会强制您在视图中添加标签。使用这些自定义库在视图中添加选项卡后,尝试应用卷曲效果。