我一直在尝试使用android转换框架,但遇到了一些问题.我有一个ImageView,它从屏幕中心移动到左上角.一切正常,但是一旦新场景进入,从服务器加载的图像就会从imageview中消失.据我所知,这是一种过渡的观点,内容也会丢失.但我该如何处理这个问题.代码如下: -
<!-scene1.xml-->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:id="@+id/container"
android:layout_height="match_parent">
<ImageView
android:layout_width="150dp"
android:layout_height="215dp"
android:layout_centerInParent="true"
android:id="@+id/theimage"
/>
</RelativeLayout>
<!--scene2.xml-->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:id="@+id/container"
android:layout_height="match_parent">
<ImageView
android:layout_width="150dp"
android:layout_height="215dp"
android:layout_alignParentTop="true"
android:id="@+id/theimage"
/>
</RelativeLayout>
<!--theFragment-->
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View theViewGroup=inflater.inflate(R.layout.scene1, container, false);
//both scene1 and scene 2 contain an imageview
//the imageview of scene1 is populated by an image downloaded by picasso
RelativeLayout thecont= (RelativeLayout) movieDetailView.findViewById(R.id.moviedesccontainer);
mScene=Scene.getSceneForLayout(thecont,R.layout.scene2,getActivity());
someButton.onClickListener(new OnClickListener(){
public void onClick(){
//when scene2 comes is the imageview has …Run Code Online (Sandbox Code Playgroud) 我试图实现“ 材料设计规格”中显示的行为。
Pre Lollipop设备上的视觉连续性的“注意事项”部分。
因此,基本上我需要创建一种向其他View动画的View过渡。是否有任何特定的图书馆可以做到这一点?还是我应该写我自己的?
就我而言,没有共享的Views,只有一个动画。实际上还动画返回列表。
android-animation android-studio android-transitions material-design
我有两个活动,只有一个共享对象,一个ImageView.这两个活动都是子类,AppCompatActivity它们共享相同的主题:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowContentTransitions">true</item>
<item name="android:windowTranslucentStatus">false</item>
<item name="android:windowExitTransition">@transition/transition_slide</item>
<item name="android:windowEnterTransition">@transition/transition_slide</item>
<!-- specify shared element transitions -->
<item name="android:windowSharedElementEnterTransition">
@transition/obj_transition</item>
<item name="android:windowSharedElementExitTransition">
@transition/obj_transition</item>
</style>
Run Code Online (Sandbox Code Playgroud)
活动A按以下方式调用活动B:
Intent intent = new Intent(ActivityA.this, ActivityB.class);
ActivityOptionsCompat options = ActivityOptionsCompat
.makeSceneTransitionAnimation(ActivityA.this, view, "common_tag");
ActivityCompat
.startActivityForResult(ActivityA.this, intent, ACT_B_TAG, options.toBundle());
Run Code Online (Sandbox Code Playgroud)
在Activity B上,我想在同一个共享的ImageView上启动一个简单的摆动动画.如果我在onCreate方法上启动动画,结果非常难看,因为它在活动转换结束之前开始.所以我覆盖了onEnterAnimationComplete()Activity B中的方法:
@Override
public void onEnterAnimationComplete() {
Log.d(TAG, "ANIMATION COMPLETE");
Animation …Run Code Online (Sandbox Code Playgroud) 为了让共享元素转换顺利运行,我需要在目标活动中推迟繁重的初始化.见下面的代码:
getWindow().setSharedElementEnterTransition(enterTransition);
enterTransition.addListener(new Transition.TransitionListener() {
@Override
public void onTransitionEnd(Transition transition) {
init();
}
});
Run Code Online (Sandbox Code Playgroud)
但是,如果此活动是从Deep link另一个没有共享元素的活动开始的.过渡永远不会开始,因此onTransitionEnd()永远不会被调用,init()永远不会运行.在这种情况下,我应该init()在活动开始后立即打电话.
我怎么知道过渡将会发生?
编辑
我还想在共享元素转换不可用时运行另一个输入转换.所以在下面回答建议使用postponeEnterTransition()对我的情况不起作用.
performance android android-intent android-activity android-transitions
我有两个活动,两个活动都包含一个图像.我正在使用Fresco将图像加载到一个活动中,而使用Picasso将图像加载到另一个活动中.以下是我的代码的相关部分:
第一个活动中的图像
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/imageView102"
android:transitionName="image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginLeft="9dp"
android:layout_marginRight="9dp"
android:layout_marginTop="10dp"
fresco:actualImageScaleType="centerCrop"
fresco:placeholderImage="@color/wait_color"
fresco:placeholderImageScaleType="fitCenter"
fresco:viewAspectRatio="1.33"
android:layout_marginBottom="10dp" />
Run Code Online (Sandbox Code Playgroud)
第二次活动中的图像
<uk.co.senab.photoview.PhotoView
android:id="@+id/zoomable"
android:transitionName="image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true" />
Run Code Online (Sandbox Code Playgroud)
我在第二个活动中使用PhotoView来放大和缩小图像.
第一项活动
Uri uri = Uri.parse(photoUrl);
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri)
.setProgressiveRenderingEnabled(true)
.build();
DraweeController controller = Fresco.newDraweeControllerBuilder()
.setImageRequest(request)
.setOldController(image.getController())
.build();
image.setController(controller);
image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(ImageActivity.this, AlternateFullImageActivity.class);
intent.putExtra("ID", photoId);
intent.putExtra("photoUrl", photoUrl);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
ActivityOptionsCompat options = ActivityOptionsCompat.
makeSceneTransitionAnimation(ImageActivity.this, (View)image, "image");
startActivity(intent, options.toBundle());
}
else …Run Code Online (Sandbox Code Playgroud) 我的目标是在片段之间创建内容转换,其中Fade()和Slide()仅应用于片段上的一个视图。执行过渡(在这种情况下为exitTransition)时,视觉效果是视图被复制,一个副本滑动,另一个副本淡化,而不是视图同时滑移和褪色。
一些代码:
Fragment currentFragment = getSupportFragmentManager().getFragments().get(0);
Fragment fragment = EmailSearchFragment.newInstance();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
fragment.setEnterTransition(new Slide(Gravity.RIGHT));
currentFragment.setExitTransition(TransitionInflater.from(this).inflateTransition(R.transition.slide_and_fade));
}
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.fragment_container, fragment)
.addToBackStack(null)
.commit();
Run Code Online (Sandbox Code Playgroud)
这里是过渡:
public class DetailsTransition extends TransitionSet {
public DetailsTransition() {
init();
}
/**
* This constructor allows us to use this transition in XML
*/
public SlideAndFadeTransitionSet(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
setOrdering(ORDERING_TOGETHER);
addTransition(new Fade()).
addTransition(new Slide(Gravity.TOP));
}
}
Run Code Online (Sandbox Code Playgroud)
并且,这里的xml以过渡的单一视图为目标:
<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android" class="com.adidas.connect.app.transition.DetailsTransition">
<targets>
<target …Run Code Online (Sandbox Code Playgroud) 不知道如何更好地解释这一点,但它主要是通过Gallery选择器碎片等的聊天应用程序实现的.最好的例子是Google Allo,我在下面发布了GIF.我想知道如何实现以及如何复制该功能.
正如您所看到的,地图片段首先从屏幕的底部转换到屏幕的一半,但是当它实际填满整个屏幕甚至创建它自己的工具栏时,它可以通过手指拖动到屏幕的顶部.最重要的是,我测试了它,这也适用于API 16.

user-interface android android-fragments android-transitions
我想实现Google的材料设计目录(位于此处:https://material.google.com/patterns/navigational-transitions.html#navigational-transitions-parent-to-child)中定义的“高程和扩展”过渡。用于父子过渡。
但是,我发现的大多数文章和实现都解释了如何为Activity过渡执行此操作,这与Fragment过渡(需要自定义动画)有些不同。有人幸运地为片段过渡实现了此动画吗?
android android-fragments android-transitions material-design
我有个小问题。
我有一个带列表的片段A和一个带列表的活动B。现在,A和B具有一个共同的图像,因此我设置了一个共享元素过渡,并且它在从A到B的途中起作用。
但是,如果我按下“后退”按钮,我不想进行反向转换。所以我不叫B supportFinishAfterTransition代替finish。但是现在有一些丑陋的动画:
B除了图像正常消失。图像停留在前景中,直到在背景中可见A,然后消失为止。
我该如何预防?我想要正常的行为,例如是否致电finish或onBackPressed。
招呼
有一个很棒的iOS过渡库称为Hero(https://github.com/lkzhao/Hero)
有谁知道类似的库或本机选项的接口,它们像Hero一样解决方案?