我有一个片段,可以加载大量数据并将其显示到 recyclerView 中。如果我直接打开此片段而不等待转换完成,则转换将变得不稳定,因为线程受到 recyclerView 更新数据的限制
所以我想延迟这个更新数据,直到片段转换完成。
但遗憾的是,我还没有找到任何方法来监听片段转换完成,因此我当前的方法是将数据更新延迟几毫秒,直到使用 Handler() ,但我相信这是非常hacky并且不是优雅的解决方案
Handler().postDelayed({
//do something
}, 500)
Run Code Online (Sandbox Code Playgroud)
我需要帮助来知道应该调用什么方法来监听片段转换完成。谢谢你uu
我正在尝试使用TransitionDrawable来在播放/暂停图标之间切换.当我第一次点击播放按钮时,播放图标停留,暂停按钮出现在播放图标的顶部.当我再次点击时,暂停图标消失,播放按钮就在那里.
代码:onClick运行此方法
private void startOrPause() {
TransitionDrawable drawable = (TransitionDrawable) mPlayBtn.getDrawable();
if (!isPlaying) {
drawable.startTransition(300);
} else {
drawable.reverseTransition(300);
}
isPlaying = !isPlaying;
}
Run Code Online (Sandbox Code Playgroud)
XML:过渡
<transition xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_play"/>
<item android:drawable="@drawable/ic_pause"/>
</transition>
Run Code Online (Sandbox Code Playgroud)
的ImageButton:
<ImageButton android:id="@+id/audio_layout_play_imageButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:src="@drawable/play_pause_transition"
android:background="@android:color/transparent"
android:layout_marginLeft="4dp"
/>
Run Code Online (Sandbox Code Playgroud)

我查看了android示例代码和互联网上的一些指南,每个人都这样做.
谢谢你的帮助,
罗伊
我只是看了一下twitter应用程序,它似乎在从一个屏幕移动到另一个屏幕时有一个很好的滑动过渡.我试图在我的应用程序中获得相同的行为.
目前我在屏幕之间移动:
startActivityForResult(new Intent(getApplicationContext(), MyActivity.class), 1);
Run Code Online (Sandbox Code Playgroud)
但这种方式屏幕之间没有过渡.在MyActivity刚刚弹出在屏幕上.
我正在尝试使用 Android 中的 SharedElements 和 Content Transitions。我试图结合 Content Transitions 和 Shared Elements 并创建一个特定的动画,但是我遇到了一个问题。在共享元素 (ImageView) 上的过渡结束后,我使用内容过渡将文本视图动画化到使用幻灯片过渡的位置。然而,当 textViews 从底部滑动到它们在图像视图顶部的位置时,文本会在 ImageView(共享元素)下方,然后才出现在 ImageView 的顶部。有没有办法做到这一点?

我在这里分享一个简短的代码,其中包含一些解释这一点的屏幕截图:
Activity_A.java
package com.example.mehulp.sharedelementsviewheirarchy;
import android.app.Activity;
import android.app.ActivityOptions;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
public class Activity_a extends Activity {
ImageView imageView_a;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_activity_a);
imageView_a = (ImageView) findViewById(R.id.imgView_a);
imageView_a.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
imageClickListener();
}
});
}
private void imageClickListener() {
Intent intent = new Intent(Activity_a.this, Activity_b.class);
startActivity(intent, …Run Code Online (Sandbox Code Playgroud) android android-transitions shared-element-transition android-5.1.1-lollipop
我正在为API级别为20+的设备进行场景转换.它工作正常,但我想设置自定义持续时间来进行转换.可能吗 ??
我的代码:
ActivityOptionsCompat options =
ActivityOptionsCompat.makeSceneTransitionAnimation(this,
viewStart,
transitionName
);
ActivityCompat.startActivity(this, detailsIntent, options.toBundle());
Run Code Online (Sandbox Code Playgroud) animation android android-transitions shared-element-transition
Android的DataBinding库是否与Transitions框架一起使用?
Scene scene = Scene.getSceneForLayout(this, R.layout.creditcardentryview_scene2_expanded, this.getContext());
TransitionManager.go(scene);
scene2Binding = CreditcardentryviewScene2ExpandedBinding.bind(this);
Run Code Online (Sandbox Code Playgroud)
尝试上面的代码会引发此错误: view tag isn't correct on view:null
data-binding android android-transitions android-databinding
我有 2 个活动,共享元素转换工作正常。ChangeBounds是唯一应用的过渡。
我想在共享元素移动时应用淡入淡出过渡,因此排序是 ORDERING_TOGETHER。
public class TransitionUtils {
public static Transition makeSharedElementEnterTransition(final Context context, final long duration) {
TransitionSet set = new TransitionSet();
set.setOrdering(TransitionSet.ORDERING_TOGETHER);
set.setDuration(duration);
Transition changeBounds = new ChangeBounds();
changeBounds.addTarget(context.getString(R.string.transition_name_search_text));
set.addTransition(changeBounds);
Transition fade = new Fade(Fade.OUT);
fade.addTarget(context.getString(R.string.transition_name_search_text));
set.addTransition(fade);
return set;
}
}
Run Code Online (Sandbox Code Playgroud)
该startActivity调用ActivityOptions.makeSceneTransitionAnimation
在 EndActivity 中,设置了输入共享元素过渡
public class EndActivity extends Activity{
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.blabla);
getWindow().setSharedElementEnterTransition(TransitionUtils.makeSharedElementEnterTransition(this,2000));
}
}
Run Code Online (Sandbox Code Playgroud)
笔记:我注意到
TransitionManager.beginDelayedTransition()我正在尝试使用支持库来延迟转换。
我想用它AutoTransition来实现LinearLayout出现/消失。动画效果与预期完全一致,只是没有延迟。
TransitionManager.beginDelayedTransition(rootViewGroup, new AutoTransition().setStartDelay(1000));
linearLayout.setVisibility(View.VISIBLE);
Run Code Online (Sandbox Code Playgroud)
当然,它linearLayout是在层次结构中的。rootViewGroup
我有下一种情况。Activity[FragmentWithPager[PageWithGrid]]我想制作从list item到的传统动画,DetailFragment但我不知道wnat我做错了。我已经transitionName在list item和中的视图中添加了相同的内容,fragment detail并尝试使用下面的代码制作过渡动画。
val fragmentTransaction = supportFragmentManager.beginTransaction()
transitionItems.forEach { view ->
fragmentTransaction.addSharedElement(view, view.transitionName)
}
val fragment = DetailFragment()
val transitionSet = TransitionSet().apply {
addTransition(ChangeTransform())
addTransition(ChangeClipBounds())
addTransition(ChangeBounds())
}
fragment.sharedElementEnterTransition = transitionSet
fragment.sharedElementReturnTransition = transitionSet
fragmentTransaction.replace(R.id.root, fragment)
fragmentTransaction.addToBackStack(null)
fragmentTransaction.commit()
Run Code Online (Sandbox Code Playgroud) android android-fragments android-viewpager kotlin android-transitions
我正在尝试使用片段之间共享元素的简单动画进行过渡。在第一个片段中,我在 RecyclerView 中有元素,在第二个片段中 - 完全相同的元素(在单独的 xml 布局中定义,在列表中的元素也是这种类型)在顶部和视图的其余部分中的细节。我正在为 bindViewHolder 和目标片段的 onCreateView 中的所有元素提供各种 transitionNames 我正在阅读它们并将它们设置为我想要进行过渡的元素。无论如何动画没有发生,我没有任何其他想法。下面我将我的代码片段来自源和目标片段以及列表适配器:
列表适配器:
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val item = list[position]
ViewCompat.setTransitionName(holder.view, item.id)
holder.view.setOnClickListener {
listener?.onItemSelected(item, holder.view)
}
...
}
interface interactionListener {
fun onItemSelected(item: ItemData, view: View)
}
Run Code Online (Sandbox Code Playgroud)
列表片段(来源):
override fun onItemSelected(item: ItemData, view: View) {
val action = ListFragmentDirections.itemDetailAction(item.id)
val extras = FragmentNavigatorExtras(view to view.transitionName)
val data = Bundle()
data.putString("itemId", item.id)
findNavController().navigate(action.actionId, data, null, extras)
}
Run Code Online (Sandbox Code Playgroud)
源片段布局:
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/pullToRefresh"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent" …Run Code Online (Sandbox Code Playgroud) android android-animation kotlin android-transitions android-jetpack