在ViewPager中的片段周围添加框架

时间:2012-11-04 12:48:41

标签: android android-fragments

我了解为了在活动之间滑动,我需要使用FragmentPageAdapter,就像这个this问题的答案一样。

但是,我试图在不移动的Fragments周围放置一个框架。类似于在屏幕边缘停留的画框,当您滑动时,框架保持在原位,而Fragments在彼此之间滑动。基本上,掩盖效果。我该如何实现呢?

在我的FragmentActivity的FragmentPagerAdapter中,我调用的片段与显示的示例相比,它是一个列表片段(ArrayListFragment)。我使用一个通用片段:

public static class TestFragment extends Fragment{
        /**
         * Create a new instance of DetailsFragment, initialized to
         * show the text at 'index'.
         */
        public static TestFragment newInstance(int index) {
            TestFragment f = new TestFragment();

            // Supply index input as an argument.
            Bundle args = new Bundle();
            args.putInt("index", index);
            f.setArguments(args);

            return f;
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View v = inflater.inflate(R.layout.mytext, container, false);
            return v;
        }
    }

mytext布局非常简单:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_height="fill_parent"
        android:layout_width="fill_parent"
        android:text="woohoo"
        android:gravity="center"></TextView>

</LinearLayout>

1 个答案:

答案 0 :(得分:1)

实现该框架的一种简单方法是将ViewPager放在FrameLayoutRelativeLayout上,并在其上添加自定义View

<FrameLayout>
    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <com.luksprog.ViewPagerOverlayFrame
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</FrameLayout>

在该自定义View的{​​{1}}方法中,您将绘制所需的框架。下面的代码将在onDraw

的边缘附近绘制一个不可擦除的红框
ViewPager

您可能需要向public class ViewPagerOverlayFrame extends View { private Paint mPaint; public ViewPagerOverlayFrame(Context context) { super(context); mPaint = new Paint(); mPaint.setColor(Color.RED); mPaint.setStrokeWidth(60.0f); } public ViewPagerOverlayFrame(Context context, AttributeSet attrs) { super(context, attrs); mPaint = new Paint(); mPaint.setColor(Color.RED); mPaint.setStrokeWidth(60.0f); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawLine(0, 0, getMeasuredWidth(), 0, mPaint); canvas.drawLine(getMeasuredWidth(), 0, getMeasuredWidth(), getMeasuredHeight(), mPaint); canvas.drawLine(getMeasuredWidth(), getMeasuredHeight(), 0, getMeasuredHeight(), mPaint); canvas.drawLine(0, getMeasuredHeight(), 0, 0, mPaint); } } 添加一些填充,以便其内容不会被框裁剪。