По сути, я перепрошу этот вопрос, но для его реализации на android.
Я пытаюсь разрешить пользователям прокручивать между фильтрами статическое изображение. Идея заключается в том, что изображение остается на месте, пока прокрутки фильтра над ним. Недавно Snapchat выпустил версию, которая реализует эту особенность. Это видео показывает, что именно я пытаюсь выполнить на 1:05.
Я попытался заполнить список оверлеями и прорисовывать его через onFling и рисовать с помощью onDraw, но я теряю анимацию. Есть ли способ сделать это с помощью ViewPager?
ИЗМЕНИТЬ: В соответствии с просьбой я предоставил свою реализацию для подкачки наложения. Он заполняет viewpager прозрачными изображениями png, которые располагаются поверх изображения. Кроме того, этот код находится в С#, поскольку я использую Xamarin Android. Это довольно похоже на Java для тех, кто не знаком с С#
...
static List<ImageView> overlayList = new List<ImageView>();
...
public class OverlayFragmentAdapter : FragmentPagerAdapter
{
public OverlayFragmentAdapter(Android.Support.V4.App.FragmentManager fm) : base(fm)
{
}
public override int Count
{
get { return 5; } //hardcoded temporarily
}
public override Android.Support.V4.App.Fragment GetItem(int position)
{
return new OverlayFragment ();
}
}
public class OverlayFragment : Android.Support.V4.App.Fragment
{
public override View OnCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View view = inflater.Inflate (Resource.Layout.fragment_overlay, container, false);
LinearLayout l1 = view.FindViewById<LinearLayout> (Resource.Id.overlay_container);
ImageView im = new ImageView (Activity);
im.SetImageResource (Resource.Drawable.Overlay); //Resource.Drawable.Overlay is a simple png transparency I created. R
l1.AddView (im);
overlayList.AddElement (im);
return view;
}
}
Макет деятельности XML:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="bottom">
<ImageView
android:id="@+id/background_image"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<RelativeLayout <!-- This second layout is for buttons which I have omitted from this code -->
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/edit_layout">
<android.support.v4.view.ViewPager
android:id="@+id/overlay_pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
</RelativeLayout>
Фрагмент наложения XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/overlay_container"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center" />
Чтобы кратко суммировать: viewpager находится поверх первого изображения, которое выступает в качестве фона. Метод OnCreateView создает оверлейный фрагмент и оверлейное изображение из ресурса, который он помещает внутри макета overlay_container. Сохранение изображения (которое я еще не опубликовал, поскольку оно выходит за рамки этого вопроса) прост, все, что он делает, это создать фоновое растровое изображение, наложение растрового изображения и использовать холст, чтобы нарисовать оверлей на фоне, а затем записать в файл.