我了解为了在活动之间滑动,我需要使用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>
答案 0 :(得分:1)
实现该框架的一种简单方法是将ViewPager
放在FrameLayout
或RelativeLayout
上,并在其上添加自定义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);
}
}
添加一些填充,以便其内容不会被框裁剪。