我有一个应用程序,我正在为公司目录进行活动转换.选择搜索结果后,其照片到详细信息屏幕的动画将起作用.如果我点击后退按钮,则会发生反向动画.但是,如果我从工具栏中点击后退箭头,则不会发生反向动画.
详细信息屏幕是一个新的DetailActivity,其中包含一个名为DetailFragment的片段.我没有对"onBackPressed"做任何特别的事情.我可以做?
如何在21之前的设备中实现共享元素转换?我或多或少地遵循了这里的指南http://antonioleiva.com/material-design-everywhere/但我得到的错误就像"属性transitionName仅用于api级别21或更高级别"
android android-activity activity-transition shared-element-transition
Android Lolipop有一个api,允许在不同活动中的共享元素之间轻松转换.
看起来这个api不支持具有多个视图的转换.有没有办法使用相同的API?
编辑
根据@pskink的建议,我使用了不同的方法
ActivityOptions options = ActivityOptions
.makeSceneTransitionAnimation(this, Pair.create((View)view, "viewPager"), Pair.create((View) fab, "fab"));
startActivity(intent, options.toBundle());
Run Code Online (Sandbox Code Playgroud)
这从ActivityA到ActivityB工作正常,但点击后退按钮会导致此堆栈跟踪
A/OpenGLRenderer(17305): requireSurface() called but no surface set!
A/libc(17305): Fatal signal 6 (SIGABRT), code -6 in tid 17349(RenderThread)
Build fingerprint: 'google/hammerhead/hammerhead:5.0/LRX21O/1570415:user/release-keys'
Revision: '11'
ABI: 'arm'
pid: 3364, tid: 3414, name: RenderThread >>> com.example.package <<<
signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
Abort message: 'requireSurface() called but no surface set!'
r0 00000000 r1 00000d56 r2 00000006 r3 00000000
r4 9e9b5db8 r5 …
Run Code Online (Sandbox Code Playgroud) 我目前正在尝试在我的FAB和另一个Activity之间创建一个循环过渡.
根据我在文档中提到的内容,我应该以类似的方式使用makeSceneTransitionAnimation:
public void onFabClicked(View v){
try {
Intent intent = new Intent(this, SearchActivity.class);
ActivityOptions options = ActivityOptions
.makeSceneTransitionAnimation(this, v, "reveal");
startActivity(intent, options.toBundle());
} catch (Exception e) {
// makeSceneTransitionAnimation not supported, maybe a check of SDK level is enough to avoid catching an error?
Intent intent = new Intent(this, SearchActivity.class);
startActivity(intent);
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,当前动画在动画期间显示一个矩形.
怎么可能把它变成我们喜欢棒棒糖的美丽圆形画面?
谢谢.
编辑:
我试图实现这一点(除了颜色应该全屏,但你得到了点......)):
我真正得到的是:
android android-5.0-lollipop activity-transition circularreveal
我们正在尝试进行转换,将一个 Activity 的 TextView 移动到另一个 Activity 的另一个 TextView。常见的令人敬畏的 Android Lollipop 过渡,用于动画共享视图。
在我们的场景中,第一个 TextView 是白色的,第二个是红色的。它也有不同的尺寸。
我们遇到的问题是,如果我们仔细观察动画并使用慢动作动画中的手机,我们可以看到白色 TextView 没有做任何动画。取而代之的是,红色的 TextView 出现在白色的上面,然后动画到最终位置。
我们想要实现的是在白色 TextView 移动到红色时淡出它,并从白色 TextView 淡入红色,同时对其进行动画处理。嗯……你知道的,效果令人难以置信:·)
为了实现它,我们在主题定义中使用转换:
<item name="android:windowSharedElementEnterTransition">@transition/auto_transition</item>
<item name="android:windowSharedElementExitTransition">@transition/auto_transition</item>
Run Code Online (Sandbox Code Playgroud)
并且,在我们的 auto_transition.xml 文件中:
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
<autoTransition/>
</transitionSet>
Run Code Online (Sandbox Code Playgroud)
但是,可以肯定的是,这不是 Android 人希望它工作的方式。
如果有人有任何见解,将不胜感激。谢谢!
android-5.0-lollipop activity-transition shared-element-transition
我有一个带有两个的应用程序activities
,其中第二个用作图像“选择器”并向第一个提供一些信息,以便ImageView
可以相应地更新。
为此,我activity
通过调用第二个startActivityForResult()
,并ImageView
根据收到的信息更新onActivityResult()
。
当我尝试为选取器和主元素之间的共享元素设置动画时,问题出现了Activity
:过渡动画似乎是第一个“快照” Activity
,即使恢复后ImageView
立即更新Activity
,过渡动画也会“闪烁”较旧的版本View
显示当前版本之前。
这是我制作的一个示例应用程序,用于说明我在说什么:
无缝实现此动画的最佳方法是什么?是否应该使用另一种方法?
这是用于示例的代码:
主要活动
public class MainActivity extends AppCompatActivity {
ImageView mainImageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getSupportActionBar().setTitle("Main Activity");
mainImageView = (ImageView) findViewById(R.id.imageView);
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, PickerActivity.class);
ActivityOptionsCompat options = ActivityOptionsCompat.
makeSceneTransitionAnimation(MainActivity.this, mainImageView, "shape_transition");
startActivityForResult(intent, 1, options.toBundle());
}
});
}
@Override …
Run Code Online (Sandbox Code Playgroud) android android-intent activity-transition shared-element-transition
我刚开始使用appcompat支持库重建我的Android 5.0应用程序.我刚刚完成了一个以共享元素为特色的过渡.它似乎运作良好,直到我添加一个webview
.
我制作了一个视频来演示故障. https://www.youtube.com/watch?v=MuuGZc0Vwow
正如你所看到的,当我打开活动时一切都很好.当我关闭它时,会发生故障.正如你所看到的,除了webview之外,所有元素都应该像它们应该的那样淡出.在动画结束之前,它就会挂在那里,有点破坏了动画的整体流畅度.
我该如何解决?如果它与我设置的方式有关,我很乐意分享一些代码.
提前致谢.
android android-webview android-support-library activity-transition shared-element-transition
是否有可能合并ActivityOptionsCompat.makeCustomAnimation()
和ActivityOptionsCompat.makeSceneTransitionAnimation()
?我想实现以下Activity
变化效果:
我可以分别使用第1点和第 2点、第 3点,有没有办法同时使用它们,也许使用不同的方法或其他方法?
android android-animation android-activity activity-transition
我有一个带有图像的RecyclerView,当我按下图像时,应用程序会打开另一个包含ViewPager的活动,该活动具有相同的图像但位于我选择的图像的位置.
我已经在Lollipop中完成了转换,在活动之间使用supportPostponeEnterTransition和supportStartPostponedEnterTransition在被调用的活动中共享此图像,等待viewPager加载图像以开始转换.
当我进入被调用的活动时,当我按下时,转换是正常的.
我面临的问题是,如果我移动到被调用活动的ViewPager中的另一个图像,当我按下它时动画显示它在开始时选择的图像,而不是当前选择的图像.
我已经能够将动画图像更改为在被调用活动中选择的图像:
@Override
public void onBackPressed() {
View view = ((ImageDetailFragment) adapter.getFragment(viewPager,
viewPager.getCurrentItem())).getTransitionView();
ViewCompat.setTransitionName(view, Constants.TRANSITION_IMAGE);
super.onBackPressed();
}
Run Code Online (Sandbox Code Playgroud)
但它返回到调用活动列表中原始图像的相同位置.
如何使图像返回其在调用活动列表中的位置?
android android-5.0-lollipop activity-transition shared-element-transition
我在具有多个ImageView的垂直ScrollView中使用LinearLayout,当我单击一个图像视图时,我从(活动1)到全屏库(活动2)执行过渡动画,该库具有视图分页器,用户可以向右/向左滑动..现在,当用户滑动到库中的另一个图像并按下当前可见图像(活动2)时,将恢复(再次使用过渡动画)到活动1中的起始位置,问题是图像已恢复直到它到达旧位置然后消失并显示不同的图像(因为这已经太复杂而无法讨论)我附加了一个图像.
Activity1布局:
<LinearLayout>
<ImageView />
<ImageView />
<ImageView />
<ImageView />
<ImageView />
<ImageView />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
Acivity2(图库)布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<android.support.v7.widget.AppCompatImageView
android:id="@+id/animation_image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/transparent"
android:scaleType="fitCenter"
android:src="@drawable/placeholder"
android:transitionName="@string/transition_article_image_gallery"
android:layout_centerInParent="true"
/>
<ViewPager
android:id="@+id/gallery_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
点击活动1中的任何图片:
public void openGallery(int position, ArrayList<String> images, View view)
{
Intent intent = new Intent(getActivity(), GalleryActivity.class);
intent.putStringArrayListExtra(GalleryActivity.EXTRA_GALLERY_IMAGES, images);
intent.putExtra(GalleryActivity.EXTRA_POSITION, position);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(
getActivity(),
new Pair<>(view, TARGET_ELEMENT_TRANSITION_NAME_ATTRIB_VALUE)
);
ActivityCompat.startActivity(getActivity(), intent, options.toBundle());
} else {
getActivity().startActivity(intent); …
Run Code Online (Sandbox Code Playgroud) android ×9