任何人都可以建议我使用Gmail的Android应用程序在Inbox中使用的打开和关闭过渡的示例.
我确实找到了这个例子.但是,还有其他什么吗?
本指南开始使用共享元素和动画实现打开的图像.
https://android-developers.googleblog.com/2018/02/continuous-shared-element-transitions.html
但抓住了一个例外:
java.lang.NullPointerException: Attempt to invoke virtual method 'int java.util.ArrayList.size()' on a null object reference
at android.support.transition.TransitionSet.setDuration(TransitionSet.java:196)
at android.support.transition.TransitionSet.setDuration(TransitionSet.java:60)
at android.support.transition.Transition.<init>(Transition.java:278)
at android.support.transition.TransitionSet.<init>(TransitionSet.java:91)
at android.support.transition.TransitionInflater.createTransitionFromXml(TransitionInflater.java:151)
at android.support.transition.TransitionInflater.inflateTransition(TransitionInflater.java:70)
Run Code Online (Sandbox Code Playgroud)
打电话时
TransitionInflater.from(context).inflateTransition(R.transition.my_transition)
Run Code Online (Sandbox Code Playgroud) 我正在尝试制作幻灯片动画。为此,我使用 MotionLayout 和包含两个 ConstraintSet 的 MotionScene。
幻灯片动画效果很好。但是我在 LogCat 中收到一个错误:
E/MotionLayout:警告没有 app:layoutDescription 标签
view_slider.xml
<androidx.constraintlayout.motion.widget.MotionLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/motion_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
app:layoutDescription="@xml/scene_slider"
app:showPaths="true">
<View
android:id="@+id/btn_slide"
android:layout_width="64dp"
android:layout_height="64dp"
android:background="@color/grey26" />
</androidx.constraintlayout.motion.widget.MotionLayout>
Run Code Online (Sandbox Code Playgroud)
场景滑块.xml:
<MotionScene xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:motion="http://schemas.android.com/apk/res-auto">
<Transition
motion:constraintSetStart="@+id/start"
motion:constraintSetEnd="@+id/end"
motion:duration="1000">
<OnSwipe
motion:touchAnchorId="@+id/btn_slide"
motion:touchAnchorSide="right"
motion:dragDirection="dragRight"/>
</Transition>
<ConstraintSet android:id="@+id/start">
<Constraint
android:id="@+id/btn_slide"
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_marginStart="8dp"
motion:layout_constraintBottom_toBottomOf="parent"
motion:layout_constraintStart_toStartOf="parent"
motion:layout_constraintTop_toTopOf="parent" />
</ConstraintSet>
<ConstraintSet android:id="@+id/end">
<Constraint
android:id="@+id/btn_slide"
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_marginEnd="8dp"
motion:layout_constraintBottom_toBottomOf="parent"
motion:layout_constraintEnd_toEndOf="parent"
motion:layout_constraintTop_toTopOf="parent" />
</ConstraintSet>
</MotionScene>
Run Code Online (Sandbox Code Playgroud)
SliderView.kt:
class SliderView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int …Run Code Online (Sandbox Code Playgroud) android android-layout kotlin android-transitions android-motionlayout
鉴于具有共享元素的Activity的正常Lollipop转换,例如https://github.com/codepath/android_guides/wiki/Shared-Element-Activity-Transition,很常见的是从View of Recycler View转换为正常的目标活动视图.
但是,如果是目标视图,也是在recyclerView的视图中,是否有可能实现这一点(即向ActivityOptionsCompat提供目标视图)?
谢谢!
android android-transitions shared-element-transition android-5.1.1-lollipop
我有一个按钮,点击打开另一个活动,从下面出来,覆盖一半的屏幕.我搜索了它但没有得到任何有用的方法,除了overridePendingTransition函数,这对于获取活动转换动画很有用,但这并没有解决我的问题.我知道这是在谷歌视频群聊中完成的,如图所示,但找不到任何有用的解决方案.
当我们按下按钮时,此活动会出现并覆盖屏幕尺寸的一半

当我们向上滚动活动成为我们的主要活动

知道如何做到这一点?
谢谢
android android-activity android-transitions material-design
我正在尝试学习简单的TransitionManager工作,但我有点卡住......
我的目标是通过图像点击在两个场景之间进行切换.但在第一次图像点击和第一次场景变换后,我无法捕捉图像点击...
这是我的片段代码:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
ViewGroup sceneRoot = (ViewGroup)rootView.findViewById(R.id.relative);
final Transition transition = new ChangeBounds();
transition.setDuration(3000);
final Scene scene1 = Scene.getSceneForLayout(sceneRoot, R.layout.scene1, getActivity());
final Scene scene2 = Scene.getSceneForLayout(sceneRoot, R.layout.scene2, getActivity());
ImageView image = (ImageView)rootView.findViewById(R.id.image);
image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!testBoo){
TransitionManager.go(scene2, transition);
testBoo = true;
} else {
testBoo = false;
TransitionManager.go(scene1, transition);
}
}
});
return rootView;
}
Run Code Online (Sandbox Code Playgroud)
片段xml:
<RelativeLayout …Run Code Online (Sandbox Code Playgroud) 我正在使用类似于Google日历的应用...
我该怎么做才能使转换仅使视图的可见部分为其设置动画?
这是我的过渡期:
<changeBounds xmlns:android="http://schemas.android.com/apk/res/android">
<arcMotion android:minimumHorizontalAngle="15"
android:minimumVerticalAngle="0"
android:maximumAngle="90"/>
</changeBounds>
Run Code Online (Sandbox Code Playgroud) 我正在制作一个自定义Transition设置,仅在Shared View部分可见的情况下为其可见部分设置动画.
在我的情况下,这发生是因为Shared View它在a里面ConstraitLayout,而ConstraitLayout在a里面ScrollView.
我在另一个问题中提到了这个问题: 共享元素转换 - 仅为共享视图的可见部分设置动画
这是transition系统选择的默认值:
这就是我工作的地方:
动画本身运作良好......但问题是系统在动画开始之前绘制完整的共享视图......并且有一个丑陋的眨眼.
我怎么能防止这种情况?
我已经风格了:
<item name="android:windowSharedElementsUseOverlay">false</item>
animation android android-transitions shared-element-transition
我RecyclerView在2个活动(MainActivity和DetailActivity)中的2 个项目之间使用默认共享元素转换.来自MainActivityto的动画DetailActivity工作正常,但如果用户已滚动到其中的新项目DetailActivity,则重新输入动画会将项目移至顶部.我修改了Android开发者博客上共享的示例以满足我的需求.这是我的代码的Github链接.我也尝试禁用退出动画DetailActivity,并尝试更改退出动画仅淡出,但它几乎就像退出动画根本没有得到尊重.
这是一个视频演示(可以在最后几秒看到问题):
主要活动:
class MainActivity : AppCompatActivity(), ListImageAdapter.ListImageClickListener {
private lateinit var imageData: ImageData
private lateinit var listImageAdapter: ListImageAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setupGallery()
prepareTransitions()
}
@SuppressLint("RestrictedApi")
override fun onListImageClick(position: Int, imageView: ImageView) {
val intent = Intent(this, DetailActivity::class.java)
intent.putExtra("IMAGE_DATA", imageData)
val activityOptions = ActivityOptions.makeSceneTransitionAnimation(this, imageView,
ViewCompat.getTransitionName(imageView))
startActivityForResult(intent, 101, activityOptions.toBundle())
}
override fun onActivityReenter(resultCode: Int, data: Intent?) { …Run Code Online (Sandbox Code Playgroud) android android-animation android-transitions shared-element-transition