标签: android-transitions

片段共享元素转换不适用于ViewPager

我的应用程序包含一个视图,其中包含一个由少量片段组成的ViewPager.单击其中一个片段中的项目时,预期的行为是共享元素(在本例中为图像)转换为片段,该片段显示有关所单击内容的更多信息.

这是一个非常简单的视频,它应该是什么样子:

https://dl.dropboxusercontent.com/u/97787025/device-2015-06-03-114842.mp4

这只是使用片段 - >片段转换.

将起始片段放在ViewPager中时会出现问题.我怀疑这是因为ViewPager使用其父片段的子片段管理器,它与处理片段事务的活动的片段管理器不同.这是一个发生了什么的视频:

https://dl.dropboxusercontent.com/u/97787025/device-2015-06-03-120029.mp4

我非常肯定这里的问题,因为我上面解释的是子片段管理器与活动的片段管理器.以下是我进行转换的方式:

SimpleFragment fragment = new SimpleFragment();

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.am_list_pane, fragment, fragment.getClass().getSimpleName());

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    TransitionSet enterTransition = new TransitionSet();
    enterTransition.addTransition(new ChangeBounds());
    enterTransition.addTransition(new ChangeClipBounds());
    enterTransition.addTransition(new ChangeImageTransform());
    enterTransition.addTransition(new ChangeTransform());

    TransitionSet returnTransition = new TransitionSet();
    returnTransition.addTransition(new ChangeBounds());
    returnTransition.addTransition(new ChangeClipBounds());
    returnTransition.addTransition(new ChangeImageTransform());
    returnTransition.addTransition(new ChangeTransform());

    fragment.setSharedElementEnterTransition(enterTransition);
    fragment.setSharedElementReturnTransition(returnTransition);

    transaction.addSharedElement(iv, iv.getTransitionName());
}

transaction.addToBackStack(fragment.getClass().getName());

transaction.commit();
Run Code Online (Sandbox Code Playgroud)

当两个片段都由活动的片段管理器管理时,这种方法很好,但是当我加载一个像这样的ViewPager时:

ViewPager pager = (ViewPager) view.findViewById(R.id.pager);
pager.setAdapter(new Adapter(getChildFragmentManager()));
Run Code Online (Sandbox Code Playgroud)

ViewPager的子项不是由活动管理的,它不再起作用.

这是Android团队的疏忽吗?有什么办法可以解决这个问题吗?谢谢.

android android-viewpager android-transitions

52
推荐指数
1
解决办法
1万
查看次数

如何使用android活动过渡动画浮动动作按钮?

我计划在我的一个项目中实现这样的东西,但我不清楚以下概念,也没有这样的教程,而且你不经常看到这个.这是它的样子点击这里去源

在此输入图像描述

从我所理解的所有参考文献中他们已经使用了两种类型的过渡,一种是将按钮移动到一些现存的按钮,另一种是用于触发按钮.所以我做了一些挖掘并遇到了这两个库github我认为这两个我们可以实现以下动画这里是链接

材质动画(移动按钮)和 圆形显示(使按钮看起来像爆炸)

如果您对以下内容有任何更好的答案,请在此发布

android android-animation android-transitions

41
推荐指数
2
解决办法
4万
查看次数

Android共享元素转换:将ImageView从圆形转换为矩形,然后再转换回来

我正在尝试在两个活动之间进行共享元素转换.

第一个活动有一个圆形图像视图,第二个活动有一个矩形图像视图.我只是想让圆圈从第一个活动过渡到第二个活动,在那里它变成一个正方形,当我按回时它回到圆圈.

我发现转换不是那么整洁 - 在下面的动画中,您可以看到矩形图像视图似乎减小了大小,直到它与圆的大小相匹配.方形图像视图会瞬间出现,然后出现圆圈.我想摆脱方形图像视图,以便圆圈成为过渡的终点.

有谁知道这是怎么做的? 在此输入图像描述

我已经创建了一个小测试回购,你可以在这里下载:https://github.com/Winghin2517/TransitionTest

我的第一个活动的代码 - imageview位于MainFragment我的第一个活动中:

public class MainFragment extends android.support.v4.app.Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_view, container,false);
        final ImageView dot = (ImageView) view.findViewById(R.id.image_circle);
        Picasso.with(getContext()).load(R.drawable.snow).transform(new PureCircleTransformation()).into(dot);
        dot.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent i = new Intent(getContext(), SecondActivity.class);
                View sharedView = dot;
                String transitionName = getString(R.string.blue_name);
                ActivityOptionsCompat transitionActivityOptions = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity(), sharedView, transitionName);
                startActivity(i, transitionActivityOptions.toBundle());
            }
        });
        return view;
    } …
Run Code Online (Sandbox Code Playgroud)

android whatsapp picasso android-transitions shared-element-transition

30
推荐指数
2
解决办法
6085
查看次数

CollapsingToolbarLayout标题作为共享元素转换

TextView在我的活动中有A.我如何TextView从活动A和CollapsingToolbarLayout.setTitle()活动B 的标题进行共享元素转换?

有没有办法idCollapsingToolbarLayout源代码中获取标题视图?

感谢帮助!

android android-transitions android-toolbar shared-element-transition android-collapsingtoolbarlayout

29
推荐指数
1
解决办法
3039
查看次数

底部的动画版面更改

在我的应用程序中,我使用底部工作表(来自支持库),它非常有用.现在,我想在拖动工作表时设置布局更改动画.为此,我创建了一个子类BottomSheetCallback(这通常是片段的内部类,所以不是这个calss中使用的所有对象都在这里初始化):

public class MyBehavior extends BottomSheetBehavior.BottomSheetCallback {

    Transition transition;
    float lastOffset = 0;
    Scene scene;

    public PlayerBehavior() {
        TransitionInflater inflater = TransitionInflater.from(getContext());
        transition = inflater.inflateTransition(R.transition.player);
        //transition.setDuration(300);

        scene = fullLayout;

        transition.setInterpolator(new Interpolator() {
            @Override
            public float getInterpolation(float v) {
                return lastOffset;
            }
        });
    }

    @Override
    public void onStateChanged(@NonNull View bottomSheet, int newState) {
        if(newState == BottomSheetBehavior.STATE_DRAGGING) {
            TransitionManager.go(scene, transition);
        }
    }

    @Override
    public void onSlide(View bottomSheet, final float slideOffset) {
        scene = (slideOffset > lastOffset) ? smallLayout : fullLayout; …
Run Code Online (Sandbox Code Playgroud)

android android-animation android-transitions

27
推荐指数
1
解决办法
1万
查看次数

从上到下使活动变为动画

我正在编写一个Android应用程序,我希望通过从屏幕底部到顶部的动画来显示活动.我可以使用此处的代码执行此操作:

但是,我无法执行反之亦然动画,其中Activity将通过从屏幕的顶部滑动到底部而消失.

我使用了上面链接中的代码; 通过向上滑动显示活动,但当消失时,它会淡出,而不是滑到底部.

我甚至尝试将代码放入onCreate():

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    overridePendingTransition(R.anim.appear_from_bottom, R.anim.disappear_to_bottom);
    setContentView(R.layout.activity_all_metadata_display);
    initializePage();
}
Run Code Online (Sandbox Code Playgroud)

android android-animation android-transitions

26
推荐指数
3
解决办法
3万
查看次数

共享元素转换:将活动转换为嵌套在另一个活动中的片段

我正在尝试将共享元素转换添加到我的应用程序中.

场景是用户点击图像缩略图,而不是使用全屏图像视图打开另一个活动.

如果共享视图直接托管在目标活动的布局中,则此方法正常.适用于进入/退出动画.但是当我试图在嵌套在目标活动中的片段中实现类似的效果时,这种方法不起作用.有趣的是,输入动画没有显示,但退出动画工作正常.

另一个更复杂的视图层次结构是,如果目标视图(ImageView)托管在视图寻呼机中,该视图寻呼机托管在目标活动的帧布局中.

有人有同样的问题吗?

编辑:我的点击监听器代码

public class OnClickPicture extends OnClickBase {
  private ObjectPicture object;

  public OnClickPicture(Activity_Parent activity, ObjectPicture object) {
    super(activity);
    this.object = object;
  }

  public void onClick(View v) {

    picasso.load(object.getFullUrl()).fetch();
    Intent intent = new Intent(activity, ActivityPicture.class);
    intent.putExtra("picture_object", helper.gson.toJson(object));

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && v != null) {
      Pair<View, String> p1 = Pair.create(v, "image");
      ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, p1);
      activity.startActivity(intent, options.toBundle());
    } else {
      activity.startActivity(intent);
    }

  }

}
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-transitions

25
推荐指数
1
解决办法
6480
查看次数

具有英雄元素的场景转换投掷图层超过最大值.GPU支持的尺寸

我试图在Android 5.0中将ListView中的图像与详细信息页面之间进行英雄转换.但是对于我的大约50%的图像,Android崩溃,但下面有例外.我的图像是600x400,但我尝试将它们更改为200x100,但得到了同样的错误.当它工作时,它看起来很棒,但我看不出各种图像之间的差异.真的不确定为什么它声称这个图层太大了,有人知道吗?

private void handleNewsItemClicked(AdapterView<?> arg0, View viewClicked, int arg2) {
    TopNewsItem item = ((TopNewsItem)arg0.getAdapter().getItem(arg2));
        Intent intent = new Intent(getActivity(), TopNewsDetailsActivity.class);
        intent.putExtra(TopNewsDetailsActivity.ARGS_ID, item.getGuid().getId());
        intent.putExtra(TopNewsDetailsActivity.ARGS_IMAGE,  imageUrl);
        if(Build.VERSION.SDK_INT >= 21) {                                 
            ActivityOptions options = ActivityOptions
                    .makeSceneTransitionAnimation(this.getActivity(),
                            viewClicked.findViewById(R.id.image), "article_image");                
            this.getActivity().startActivity(intent, options.toBundle());
        }else
            getActivity().startActivity(intent);
    }
}

W/OpenGLRenderer(18137): Layer exceeds max. dimensions supported by the GPU (1080x4628, max=4096x4096)
D/AndroidRuntime(18137): Shutting down VM
V/GAV3    (18137): Thread[main,5,main]: Tracking Exception: IllegalStateException (@MessageQueue:nativePollOnce:-2) {main}
/AndroidRuntime(18137): FATAL EXCEPTION: main
E/AndroidRuntime(18137): Process: myapp.app, PID: 18137
E/AndroidRuntime(18137): java.lang.IllegalStateException: Unable to create layer …
Run Code Online (Sandbox Code Playgroud)

android android-transitions android-5.0-lollipop

24
推荐指数
2
解决办法
1万
查看次数

Android - 如何创建从列表视图中的项目到整个活动的转换?

我想要的是当用户单击ListView中的列表项时,它会转换为整个活动(如下例所示),但是我无法找到解释这个的教程,实际上,我做的不知道这个运动是怎么称呼的.

换句话说,我想要达到的目标是:

  1. 单击时增加列表项高程(如右图所示)

  2. 展开列表项并将其转换为包含有关所单击项的详细信息的下一个片段/活动布局

在此输入图像描述

我尝试了很多过渡但没有运气.任何人都可以帮助我完成这个任务吗?

android listview android-animation android-activity android-transitions

24
推荐指数
2
解决办法
1万
查看次数

使用片段共享转换时,返回转换无法正常工作

我有2个片段ListMovieFragmentDetailMovieFragment.

我有一个接口,在ListMovieFragment该实现MainActivity.我正在使用共享元素转换; 当我点击图像视图ListMovieFragmentonMovieSelected被称为中MainActivity.

ListMovieFragment作品过渡.
但是当我单击back按钮时,从DetailMovieFragmentListMovieFragment 转换到ListMovieFragment无法正常工作.

什么是错的gif

这是MainActivity.我想我有一个错误的组合来设置片段的转换.

public class MainActivity extends AppCompatActivity implements ListMovieFragment.MovieSelectedListener {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if(savedInstanceState == null) {
            ListMovieFragment listMovieFragment = new ListMovieFragment();

            FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
            fragmentTransaction.add(R.id.activity_main, listMovieFragment, ListMovieFragment.TAG);
            fragmentTransaction.commit();
        }
    }

    @Override
    public void onMovieSelected(int movieId) {
        DetailMovieFragment detailMovieFragment =
                (DetailMovieFragment)getSupportFragmentManager().findFragmentByTag(DetailMovieFragment.TAG);
        /* Create a new DetailMovieFragment if not exits …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-transitions fragment-transitions

20
推荐指数
1
解决办法
1243
查看次数