标签: shared-element-transition

BottomSheetDialog 片段共享元素转换实现?

我有一个RecyclerView带有项目列表的片段。因此,当我单击某个项目时,BottomSheetDialog会打开一个。两种观点都有一些共同的观点。所以我想为此添加共享转换。我搜索 StackOverflow,但没有找到任何有关bottomsheetdialog.

所以我的问题是,是否可以将共享元素转换添加到BottomSheetDialog. 既然这是一个Fragment,应该有办法吧?有没有人有这方面的经验。?

我正在BottomSheetDialog像这样打开。

holder.cardAgenda.setOnClickListener(view -> {
                AgendaBottomSheet bottomSheetFragment = AgendaBottomSheet.newInstance();
                Bundle bundle = new Bundle();
                bundle.putString("documentId", getSnapshots().getSnapshot(position).getId());
                bundle.putString("name", model.getName());
                bundle.putString("description", model.getDescription());
                bundle.putString("date", dateFormat.format(timeStamp));
                bundle.putString("location", model.getLocation());
                bundle.putString("status", model.getStatus());
                bottomSheetFragment.setArguments(bundle);
                bottomSheetFragment.show(Objects.requireNonNull(getFragmentManager()), "Agenda Details");
            });
Run Code Online (Sandbox Code Playgroud)

那么有没有一种方法可以像fragment中的方法一样设置共享转换addSharedElement()

android android-transitions material-design shared-element-transition bottom-sheet

8
推荐指数
0
解决办法
592
查看次数

使用共享元素的Android片段转换

大家!我有2个片段.在一个片段中,我在卡片中有一个小图像.在2d片段中,我的布局标题中有相同​​的图像.我希望将此图像的共享元素从一个片段转换到另一个片段,如本例所示http://1.bp.blogspot.com/-Vv4SxVSI2DY/VEqQxAf3PWI/AAAAAAAAA7c/mfq7XBrIGgo/s1600/activity_transitions%2B(1).gif

2d片段:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#f2f4f7">
<CustomScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/scroll_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="#f2f4f7">
    <LinearLayout
        android:id="@+id/content_wrapper"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:divider="@drawable/vertical_divider"
        android:showDividers="middle">
        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <RelativeLayout
                android:id="@+id/header_wrapper"
                android:layout_width="match_parent"
                android:layout_height="166.7dp">
                <ImageView
                    android:id="@+id/share_image"
                    android:transitionName="imageTransition"
                    android:layout_width="match_parent"
                    android:layout_height="166.7dp"
                    android:src="@drawable/friday"/>
Run Code Online (Sandbox Code Playgroud)

第一片段:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center_horizontal"
android:layout_marginTop="56dp"
android:background="#ff1e1e23">
<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="25dp"
    android:src="@drawable/menuicon1g"/>
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="25dp"
    android:gravity="center"
    android:textColor="#fff"
    android:textSize="22sp"/>
<android.support.v7.widget.CardView
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/card_view"
    android:layout_gravity="center"
    android:layout_width="200dp"
    android:layout_height="300dp"
    android:layout_marginTop="25dp"
    card_view:cardCornerRadius="4dp"
    card_view:cardBackgroundColor="#fff"
    card_view:cardElevation="2dp">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:gravity="center_horizontal">
        <ImageView
            android:id="@+id/share_image"
            android:transitionName="imageTransition"
            android:layout_width="match_parent"
            android:layout_height="92.5dp"
            android:src="@drawable/friday"/>
        <ImageView
            android:layout_width="wrap_content" …
Run Code Online (Sandbox Code Playgroud)

android transitions android-fragments shared-element-transition

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

共享元素转换是否适用于不同容器中的片段?

我想在Android Lollipop的应用程序中实现共享元素转换.在我阅读了文档,SO问题和一些帖子之后我决定试一试,但现在我遇到了问题.

场景是我有两个片段容器(用于平板电脑),就像普通的列表/详细设计模式一样.

我想在触摸列表项时执行列表片段到详细信息片段之间的共享元素转换.详细信息片段的输入正常,但只要按下后退按钮,应用程序就会在转换框架代码中崩溃并显示NullPointerException.

共享元素转换是否支持该方案?

以下是启动详细信息片段的代码:

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
Fragment fragment = DetailFragment.create((int)id);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    View title = view.findViewById(R.id.item_name);
    title.setTransitionName("title");
    listFragment.setSharedElementReturnTransition(
        TransitionInflater.from(this).inflateTransition(R.transition.change_bounds));
    listFragment.setExitTransition(
        TransitionInflater.from(this).inflateTransition(android.R.transition.explode));

    fragment.setSharedElementEnterTransition(
        TransitionInflater.from(this).inflateTransition(R.transition.change_bounds));
    fragment.setEnterTransition(
        TransitionInflater.from(this).inflateTransition(android.R.transition.explode));
    ft.addSharedElement(title, "title");
}
else {
    ft.setCustomAnimations(R.anim.slide_in_right, 0, 0, R.anim.slide_out_right);
}
ft.replace(R.id.detail_panel, fragment)
   .addToBackStack(null)
   .commit();
Run Code Online (Sandbox Code Playgroud)

Logcat在这里:

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.support.v4.app.Fragment.getAllowReturnTransitionOverlap()' on a null object reference
        at android.support.v4.app.BackStackRecord.configureTransitions(BackStackRecord.java:1201)
        at android.support.v4.app.BackStackRecord.beginTransition(BackStackRecord.java:1029)
        at android.support.v4.app.BackStackRecord.popFromBackStack(BackStackRecord.java:883)
        at android.support.v4.app.FragmentManagerImpl.popBackStackState(FragmentManager.java:1541)
        at android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:502)
        at android.support.v4.app.FragmentActivity.onBackPressed(FragmentActivity.java:176)
        ...
Run Code Online (Sandbox Code Playgroud)

android-fragments android-transitions android-5.0-lollipop shared-element-transition

7
推荐指数
0
解决办法
1381
查看次数

片段转换是否有"setSharedElementsUseOverlay()"方法?

在共享元素活动转换期间ViewOverlay,默认情况下在窗口装饰视图中绘制共享元素.如有必要,开发人员可以通过调用该Window#setSharedElementsUseOverlay(false)方法来禁用此默认行为.该Fragment班然而,似乎,不申报的片段转换类似的方法.

对于片段转换,默认情况下,还是在片段视图层次结构顶部的视图覆盖中绘制共享元素吗?如果是这样,是否有一种方法可以禁用默认行为,如Activity transition API中所示?

android android-animation activity-transition shared-element-transition

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

共享元素转换没有预期的行为

我实现了从RecyclerView中的图像到新Fragment中的图像之间的共享元素转换.RecyclerView托管在由Activity托管的片段中,目标片段托管在另一个Activity中.

当我点击我的图像时,过渡就像预期的那样发生,我进入了我的片段.但是,当我单击后退按钮时,转换尝试将我的图像放在我的RecyclerView的第一个位置,而它当前正在显示不一定是第一个的图像.

从这种情况来看,我认为因为它是一个图像列表,我在其中设置了XML内的转换名称,也许在返回时,因为所有图像都具有相同的转换名称,所以该过程混淆并且只获得给定的第一个图像名称.所以也许我应该动态地给每个人提供一个不同的过渡名称.我还为目标图像设置了相同的名称,并在每次选择新图像时重置它.但它仍然无法正常工作.任何人都可以帮助我吗?

这是我的onItemClickListener中的代码:

mAdapter.setOnItemClickListener(new RssItemAdapter.OnItemCLickListener(){
    @Override
    public void onItemClick(View view, int position) {
        final RssItem item = mAdapter.getItem(position);
        final RssElementIntent intent = new RssElementIntent(getActivity(), item, position);
        // mRootView is the view of the fragment
        final ImageView image = (ImageView) 
mRootView.findViewById(R.id.rss_element_image);
        image.setTransitionName(getString(R.string.transition_name_rss_feed_picture) + position);
        ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(
                        getActivity(), image, RssElementFragment.EXTRA_IMAGE);
        ActivityCompat.startActivity(getActivity(), intent, options.toBundle());
    }
});
Run Code Online (Sandbox Code Playgroud)

以下是目标片段中的代码:

rssImage.setTransitionName(getString(R.string.transition_name_rss_feed_picture) + getArguments().getInt(ARG_ELEMENT_POSITION));
ViewCompat.setTransitionName(rssImage, EXTRA_IMAGE);
Run Code Online (Sandbox Code Playgroud)

这是themes.xml:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/theme_primary</item>
        <item name="colorPrimaryDark">@color/theme_primary_dark</item>
        <item name="android:colorAccent">@color/theme_accent</item>

        <!-- enable …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-5.0-lollipop shared-element-transition android-recyclerview

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

共享元素转换期间英雄视图的位置计算错误

我有两个活动,工具栏和CoordinatorLayouts.

借助CoordinatorLayout,可以通过滚动隐藏工具栏.

我正在尝试在它们之间进行共享元素转换,这些是我到目前为止所采取的步骤:

  • 将图像视图设置为英雄视图.
  • 将工具栏,导航栏和状态栏设置为英雄,以避免叠加问题.

这是我的问题:

当共享元素动画开始时,英雄工具栏从上到下滑动,导致整个屏幕向上移动到向下.

因为英雄imageview的位置是在此动画之前计算的,所以在移动动画后它会闪烁到最终位置.

有没有办法让动画师正确计算出imageview的最终位置?

我不确定我是否充分解决了我的问题,所以我可以提供额外的评论信息.

对不起,对不起.

提前致谢.

animation android android-toolbar shared-element-transition coordinator-layout

7
推荐指数
0
解决办法
717
查看次数

Android nougat状态栏在启动活动时显示白色

在我的Android应用程序中,我有一个MainActivity说M.这个活动使用Android的tabLayout小部件来初始化四个选项卡.每个标签对应一个片段,说F1,F2,F3,F4是四个片段.

从F2开始,我发起的活动就是C.但是在启动C时,我设备上的状态栏会闪烁一会儿.闪烁我的意思是,原来是它的黑色(黑色).然后它会逐渐淡化为白色并再次变暗.现在C启动了.当我尝试退出C,返回F2(通过按导航后退按钮)再次显示相同的效果,但这次它变得更糟.我的意思是状态栏保持白色有点长.然后它又回到了深色.

我只在android Nougat上观察这个问题.在以前的版本上它的wokring.

到目前为止,我已经尝试过 如何在活动场景动画过渡期间阻止状态栏和导航栏动画?

上面的链接有两种方法:Appraoch 1.它对我不起作用方法2.我的应用程序崩溃,因为findViewById(android.R.id.statusBarBackground);返回null.

请建议我如何解决这个问题.

android activity-transition shared-element-transition android-statusbar android-7.0-nougat

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

Android共享元素从初始屏幕转换为主要活动

在显示主要活动之前,我的应用程序显示启动画面1秒钟.启动画面和主活动共享一个公共图像,该图像是从启动画面的中心到主活动布局顶部的动画所必需的.

如果<layer-list>在主要活动中将启动画面实现为背景图像(参见启动画面正确的方式如何制作启动画面?),那么如何完成此动画并不明显,我决定实现启动画面作为正常活动,并使用共享元素转换为两个活动之间的图像设置动画.最初,我onCreate()在splash活动中使用了以下实现:

public class SplashActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);

        ImageView imageView = (ImageView)findViewById(R.id.imageView);
        String transitionName = ViewCompat.getTransitionName(imageView);
        Intent intent = new Intent(this, LoginActivity.class);
        ActivityOptionsCompat options =
                ActivityOptionsCompat.makeSceneTransitionAnimation(
                        this, imageView, transitionName);

        imageView.postDelayed(() -> {
            ActivityCompat.startActivity(SplashActivity.this, intent, options.toBundle());
            finish();
        }, 1000);
    }
}
Run Code Online (Sandbox Code Playgroud)

这种方法存在两个问题:

  1. 在调用finish()之后立即调用startActivity()会导致在动画开始之前隐藏/销毁启动活动窗口,这导致主屏幕在动画期间暂时闪烁进入视图.
  2. 从主活动按回来会自动触发共享元素返回转换,导致主活动窗口关闭后图像在主屏幕上显示为500毫秒.返回转换失败,因为splash活动已经调用了finish(),因此不再在后台堆栈上.

为了解决第一个问题,我将finish()调用包装在postDelay()Runnable中,以确保只有在共享元素转换完成后才会调用它.在我的应用程序中有1500毫秒的延迟,但应根据其他用例所需的时间调整该值.

...

imageView.postDelayed(() -> {
    ActivityCompat.startActivity(SplashActivity.this, intent, options.toBundle());
    imageView.postDelayed(this::finish, 1500);
}, 1000);
Run Code Online (Sandbox Code Playgroud)

为了解决第二个问题,我重写了主活动的onBackPressed()方法直接调用, …

android splash-screen android-animation android-transitions shared-element-transition

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

方向改变后转换闪烁

UPDATE

我已经在谷歌https://issuetracker.google.com/issues/63663775上打开了一个错误

我正在尝试makeSceneTransitionAnimation在我当前的Android应用程序中使用.

我有一个Source Activity,它包含一个Fragment,而Fragment内部是一个RecyclerView.

当我单击RecyclerViewI过渡到我的目标Activity中的图像时,其中包含一个正确显示具有可接受动画的图像的片段.

按后退按钮可正确反转动画.

以上在纵向和横向都可以正常工作.

当我在查看目标片段时更改方向然后按后退按钮时,会出现BLINKING问题.

还有其他问题,例如图像不能直接返回到其原始位置,而在较旧的设备上,我看到水平线像来自严重调谐的模拟电视的干扰.

它的BLINKING非常糟糕,设备屏幕完全黑色约500ms.

我已下载并部署了Google示例共享元素转换应用,它似乎具有相同的"功能".

我尝试了多种解决方案,但没有一种方法可以解决,例如这样.

是展示问题的一个.

添加了LOGCAT

07-21 12:57:18.097 1962-1967/com.incentive.yellowpages I/zygote64: Do partial code cache collection, code=30KB, data=21KB
07-21 12:57:18.099 1962-1967/com.incentive.yellowpages I/zygote64: After code cache collection, code=30KB, data=23KB
07-21 12:57:18.099 1962-1967/com.incentive.yellowpages I/zygote64: Increasing code cache capacity to 128KB
07-21 12:57:20.540 1962-2058/com.incentive.yellowpages D/OkHttp: --> GET http://www.spyur.am/en/home/search-1/?company_name=Happy http/1.1
07-21 12:57:20.688 1962-1967/com.incentive.yellowpages I/zygote64: Do partial code cache collection, code=61KB, …
Run Code Online (Sandbox Code Playgroud)

animation android android-animation android-transitions shared-element-transition

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

如何使用Android导航组件将共享的过渡元素从RcyclerView的项目实现为Fragment?

我有一个非常简单的案例。我想在RececlerView和中的项目之间实现共享元素转换fragment。我在我的应用程序中使用android导航组件。

上有一篇关于developer.android上的共享过渡和关于stackoverflow的文章,但是该解决方案仅适用于位于fragment布局中的视图,该视图开始过渡并且不适用于的项目RecyclerView。在github上也有一个lib,但是我不想依靠第三方的lib自己做。

有解决方案吗?也许应该工作,这只是一个错误?但是我还没有找到任何信息。

代码示例:

过渡开始

class TransitionStartFragment: Fragment() {

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    return inflater.inflate(R.layout.fragment_transition_start, container, false)
    }

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    val testData = listOf("one", "two", "three")
    val adapter = TestAdapter(testData, View.OnClickListener { transitionWithTextViewInRecyclerViewItem(it) })
    val recyclerView = view.findViewById<RecyclerView>(R.id.test_list)
    recyclerView.adapter = adapter
    val button = view.findViewById<Button>(R.id.open_transition_end_fragment)
    button.setOnClickListener { transitionWithTextViewInFragment() }
    }

private fun transitionWithTextViewInFragment(){ …
Run Code Online (Sandbox Code Playgroud)

android shared-element-transition android-recyclerview android-architecture-navigation

7
推荐指数
2
解决办法
1487
查看次数