相关疑难解决方法(0)

ViewPager片段 - 共享元素转换

我正在开发的应用程序显示图像网格.点击图像时,它会进入详细信息视图.详细信息视图包含一个ViewPager,允许您在网格中的每个图像之间滑动.这是通过传递路径列表(包含网格中的每个图像)以及被点击的图像的偏移来完成的,因此可以将ViewPager设置为最初显示该页面.

在ViewPager中当前偏移页面的Fragment内部进行共享元素转换的最佳方法是什么?网格(RecyclerView)图像应扩展为当前页面中的全屏图像.我看到了推迟和恢复活动转换的能力,因此应用程序将等待显示共享元素转换,直到从磁盘加载图像.但我希望能够使其在视图寻呼机中对正确的页面进行动画处理,并在用户返回时退出到当前页面的任何内容(因为您可以在页面之间滑动).如果您现在滑动到其他页面,则初始页面会回显到网格中.

目前,我使用"image_ [index]"格式的transitionName为视图寻呼机的片段中的每个图像分配.当我启动详细信息活动时,我使用相同的transitionName,索引是偏移量.

与此相关,我也想知道如何使用长按压使涟漪起作用.当您更改视图的激活状态时,它似乎取消了波纹.我想要一种类似于Gmail的效果,其中纹波重新开始并在长按完成后快速完成并触发激活状态.

animation android activity-transition shared-element-transition sharedelementcallback

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

如何在Android Lollipop中推迟片段的输入转换?

在Android Lollipop中,Activity#postponeEnterTransition()Activity#startPostponedEnterTransition()方法使Activity能够延迟开始进入和退出共享元素转换,直到加载所有数据.这些非常适合Activity过渡.

有没有办法在使用Fragment过渡时达到相同的效果?

android android-5.0-lollipop activity-transition shared-element-transition fragment-transitions

17
推荐指数
1
解决办法
7494
查看次数

共享元素转换在父片段和子片段(嵌套片段)之间不起作用

在主要活动中,我有BottomNavigationView3 个不同的父片段。父片段具有recyclerview并在 recyclerview 的项目单击时,我正在启动子片段以获取有关该项目的更多详细信息。我试图Shared Element Transition在我的两个片段(父和子)之间实现,但它没有发生。

启动子片段没有问题,我也检查了转换名称,它与我分配给适配器中的项目的子片段相同。我正在使用Random类将转换名称分配给项目,因为在单父片段中我有很多 recyclerviews。这是我的代码:

适配器

    final String transition;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        transition = "transition" + new Random().nextInt(9999999);
        viewHolder.image.setTransitionName(transition);
    }
    viewHolder.container.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            mCallback.itemClicked(i, book, viewHolder.image, transition);
        }
    });
Run Code Online (Sandbox Code Playgroud)

父片段

@Override
public void itemClicked(int pos, Book book, View view, String transition) {
    MainActivity activity = (MainActivity) getActivity();
    ChildFragment myFragment = new ChildFragment();
    Bundle bundle = new Bundle();
    bundle.putString(IntentExtraKeys.TRANSITION_NAME, transition);
    myFragment.setArguments(bundle);
    activity.showFragmentWithTransition(this, …
Run Code Online (Sandbox Code Playgroud)

android android-fragments child-fragment

7
推荐指数
1
解决办法
1482
查看次数

Android Material Fragment转换共享元素在viewpager中无法正常工作

我有一个视图寻呼机,其中包含4个完全不同的片段.

从该寻呼机的片段A我想创建一个像这样的新片段:

Transition changeTransform = TransitionInflater.from(getActivity()).inflateTransition(R.transition.change_image_transform);
                Transition explodeTransform = TransitionInflater.from(getActivity()).inflateTransition(android.R.transition.explode);

                // Setup exit transition on first fragment
                setSharedElementReturnTransition(changeTransform);
                setExitTransition(explodeTransform);

                // Setup enter transition on second fragment
                PropertyFragment fragment = new PropertyFragment();
                fragment.setSharedElementEnterTransition(changeTransform);
                fragment.setEnterTransition(explodeTransform);


 FragmentTransaction ft = getChildFragmentManager().beginTransaction()
                        .replace(R.id.container, fragment)
                        .addToBackStack(fragment.getFragmentTag())
                        .addSharedElement(icon, icon.getTransitionName())
                        .addSharedElement(text, text.getTransitionName());
                        ft.commit();
Run Code Online (Sandbox Code Playgroud)

R.id.Container是FragmentA的父RelativeRayout(不是活动的)R.transition.change_image_transform如下:

<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
    <changeTransform />
    <changeBounds />
    <changeImageTransform/>
</transitionSet>
Run Code Online (Sandbox Code Playgroud)

片段事务工作,并发生explodeTransform.但是共享元素转换不起作用.就像他们甚至不在那里一样.我已尝试以编程方式创建转换而不是XML以及这些的所有组合:,我可以.什么都行不通.转换名称在两端都是正确的100%.

我也为事务尝试了getChildFragmentManager(),getactivity().getSupportFragmentManager(),但它也没有做任何改变.

当凝视片段不属于Viewpager时,转换也会起作用.所以问题就出现了.你有什么想法吗?我也发现了这一点:片段共享元素转换不适用于ViewPager,我认为它我的相同,但该解决方案仅适用于Activity转换,因此它并没有真正帮助.

android android-animation android-fragments

5
推荐指数
0
解决办法
548
查看次数

共享元素转换为包含 ViewPager 的片段

我正在尝试执行从片段 A 中的 RecyclerView 项目到片段 B 的共享元素转换。转换名称设置在两个布局中最外层的 CardView 上。我的实现与示例中的实现基本相同。

一切正常,直到我在片段 B 中添加了一个 ViewPager2。

我尝试按照答案中的步骤进行操作,但没有运气。

堆栈跟踪:

java.lang.IndexOutOfBoundsException: Index: 5, Size: 5
        at java.util.ArrayList.get(ArrayList.java:437)
        at androidx.fragment.app.FragmentTransitionImpl.setNameOverridesReordered(FragmentTransitionImpl.java:182)
        at androidx.fragment.app.DefaultSpecialEffectsController.startTransitions(DefaultSpecialEffectsController.java:665)
        at androidx.fragment.app.DefaultSpecialEffectsController.executeOperations(DefaultSpecialEffectsController.java:114)
        at androidx.fragment.app.SpecialEffectsController.executePendingOperations(SpecialEffectsController.java:294)
        at androidx.fragment.app.Fragment$3.run(Fragment.java:2776)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Run Code Online (Sandbox Code Playgroud)

编辑:显示我的依赖项以回应建议片段版本需要更新的答案:

ext.kotlin_version = "1.5.10"
ext.navigation_version="2.4.0-alpha02"

implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'androidx.core:core-ktx:1.5.0'
implementation 'androidx.appcompat:appcompat:1.3.0'
implementation 'com.google.android.material:material:1.3.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'

implementation 'androidx.preference:preference-ktx:1.1.1'
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.1'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'

coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.3'
implementation …
Run Code Online (Sandbox Code Playgroud)

android android-fragments shared-element-transition android-architecture-navigation android-viewpager2

4
推荐指数
1
解决办法
296
查看次数

从片段退出到包含Viewpager的Activity时,共享元素转换不起作用

我有一个RecyclerView在一个Viewpager片段内和从一个项目中共享元素RecyclerViewDetailActivity含有片段.我正在DetailActivity为片段的进入和退出设置转换.

public static void sharedTransitionReceiver(Activity activity, Fragment fragment) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        activity.getWindow().getEnterTransition().setDuration(500);
        Slide slideTransition = new Slide(Gravity.START);
        slideTransition.setDuration(500);
        fragment.setReenterTransition(slideTransition);
        fragment.setExitTransition(slideTransition);
        fragment.setSharedElementEnterTransition(new ChangeBounds());
    }
}
Run Code Online (Sandbox Code Playgroud)

它运行得很好但是当我导航回包含Viewpager退出的上一个活动时,动画不起作用,并且项目不会动画回原始位置.

android android-fragments shared-element-transition

3
推荐指数
1
解决办法
1270
查看次数