gpt4 book ai didi

Android 5.0 列表动画

转载 作者:行者123 更新时间:2023-11-29 01:35:08 25 4
gpt4 key购买 nike

我有一个由 ViewTextView 组成的项目列表。我定义了一个动画:

View mView = findViewById(R.id.view);
Intent detailIntent = new Intent(this, DetailActivity.class);
String transitionName = getString(R.string.my_transition);
ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this,
mView, transitionName);
startActivity(detailIntent, options.toBundle());

在我的 list_item.xml 中我有:

<View
android:id="@+id/view"
android:layout_width="@dimen/list_dimen"
android:layout_height="match_parent"
android:layout_marginStart="0dp"
android:background="@color/accent"
android:transitionName="@string/my_transition"/>

第一个项目的过渡效果很好,但无论我点击列表中的哪个项目,动画总是来自第一个项目,如果我滚动到第一个项目不可见的地方,应用程序强制当我点击一个项目时关闭。如何将动画附加到特定列表项?

解决方案:

根据 MarcaoAS 的回答,我必须将 View 附加到特定的 Root View 。我正在实现一个 Master-Detail 关系,所以我的列表有一个 Fragment,其中包含一个 Callbacks :

public interface Callbacks {
public void onItemSelected(String id);
}

我必须对其进行编辑以将 View 作为参数而不是 String:onItemSelected(View view)

同样,我必须在引用的地方进行此更改。当生成 Fragment 时(我在 Android Studio 中创建项目时选择了 Master-Detail),onListItemClick 被覆盖:

@Override
public void onListItemClick(ListView listView, View view, int position, long id) {
super.onListItemClick(listView, view, position, id);
mCallbacks.onItemSelected(view);
}

如您所见,我再次将 id 替换为传入的 view

在我的 ListActivity 中,我在上面发布了我的原始代码,现在我有:

@Override
public void onItemSelected(View view) {
//tablet
if (mTwoPane) {
//tablet handling
}
//phone
else {
View mView = view.findViewById(R.id.view);
Intent detailIntent = new Intent(this, DetailActivity.class);
String transitionName = getString(R.string.my_transition);
ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this,
mView, transitionName);
startActivity(detailIntent, options.toBundle());
}
}

再次从Fragment 类传入View。这解决了我的问题。

最佳答案

确保您的以下代码返回项目 View 。

View mView = findViewById(R.id.view);

如果您从 Activity 中调用它,它将始终返回第一个项目,因为您的项目可能具有相同的 ID。尝试在您的 onClick 方法中这样做:

public void onClick(View v) {
View mView = v.findViewById(R.id.view);
Intent detailIntent = new Intent(this, DetailActivity.class);
String transitionName = getString(R.string.my_transition);
ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this, mView, transitionName);
startActivity(detailIntent, options.toBundle());
}

关于Android 5.0 列表动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28731916/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com