【发布时间】:2015-08-11 15:18:37
【问题描述】:
基本上,我是在重新询问this question,但要在 android 上实现它。
我正在尝试允许用户在静态图像上的过滤器之间滑动。 这个想法是在过滤器滚动时图像保持在原位 它上面。 Snapchat 最近发布了一个实现此功能的版本 特征。 This video shows exactly what I'm trying to accomplish at 1:05.
我尝试使用叠加层填充列表并使用 onFling 对其进行分页并使用 onDraw 进行绘图,但我丢失了动画。有没有办法用 ViewPager 来做到这一点?
编辑:根据要求,我提供了覆盖视图分页的实现。它用位于图像视图顶部的透明 png 图像填充 viewpager。此外,此代码使用 C#,因为我使用的是 Xamarin Android。对于不熟悉 C# 的人来说,它与 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 位于第一个 imageview 之上,它充当背景。 OnCreateView 方法从资源中创建一个覆盖片段和一个覆盖图像视图,并将其放入 overlay_container 布局中。保存图像(我没有发布,因为它超出了这个问题的范围)很简单,它所做的只是创建一个背景位图,一个叠加位图,并使用画布将叠加层绘制到背景上,然后写入文件。
【问题讨论】:
-
嗨,伙计,这不是通过简单地使视图寻呼机背景透明并在其后面放置图像视图来实现的吗?它有 100 个赏金,所以我觉得这还不够完整,但我就是这样做的,我不明白为什么它不起作用。
-
@Ben 嘿,这就是我实现覆盖的方式。我后面有一张图片,视图寻呼机有一些叠加层。但是,我认为这不适用于图像过滤器(黑白、棕褐色等)
-
啊对,我只看了几秒钟,就看到上面的文字飞过。祝你好运;P
-
您可以尝试使用 ViewPager 执行此操作,但是您必须使用额外的动画“补偿” ViewPager 幻灯片动画:从右侧滑入,图像的 RIGHT 部分必须首先出现,然后逐渐暴露图像的其余部分。我的建议是在旧的 ImageView 上放置一个具有效果的新 ImageView,并编写一个效果,通过滑动进度条以正确的方式显示图像。您可以使用 fling 自动化效果并处理所有边缘情况。
-
如果您能上传您尝试过的代码,那就太好了。在您的最后一句话中,您似乎已经实现了。而你只丢失了动画部分。
标签: java android android-viewpager imagefilter snapchat