gpt4 book ai didi

删除列表项上的 Android 平滑过渡

转载 作者:行者123 更新时间:2023-11-30 00:31:02 24 4
gpt4 key购买 nike

这个 gif 说明了我正在努力完成的事情:

ideal behavior

ListView 的所有项目都被删除,除了被点击的项目,它平滑地过渡到 ListView 的中心,现在大小为 1。

问题是,每当适配器的 ArrayList 的 前面 的项目被删除时,换句话说,当单击第一个项目以外的任何其他项目时,我会得到这种不连续的过渡,其中被单击的项目及其文本在转换之前跳转到先前第一项的位置: unwanted behavior

final String[] items = {"foo", "bar", "The Quick Brown Fox", "qwerty"};
final ArrayList<String> alItems = new ArrayList<>(Arrays.asList(items));

final ArrayAdapter adapter = new ArrayAdapter<String>(this, R.layout.list_item, R.id.tv1, alItems);
final ViewGroup main = (ViewGroup) findViewById(R.id.main);
final ListView lv = (ListView)findViewById(R.id.theListView);
lv.setAdapter(adapter);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// Remove all items except for the chosen one

TransitionManager.beginDelayedTransition(main);
alItems.subList(0, position).clear(); // Remove items before clicked item
alItems.subList(1, alItems.size()).clear(); // Remove items after clicked item
adapter.notifyDataSetChanged();

}
});

我怀疑这与在幕后将 ArrayList 设置为新的 ArrayList 有关。有什么不用跳跃就能达到预期效果的好方法?

最佳答案

黑客警报!!!

    TransitionManager.beginDelayedTransition(main);
// set all but selected to empty string
// this leaves the list intact but only displaying selected item
for (int i=0; i<alItems.size(); i++) {
if(i != position) {
alItems.set(i, "");
}
}
adapter.notifyDataSetChanged();

// now wait a while & clear the list
Runnable runnable = new Runnable() {
@Override
public void run() {
alItems.subList(0, position).clear(); // Remove items before clicked item
alItems.subList(1, alItems.size()).clear(); // Remove items after clicked item
adapter.notifyDataSetChanged();
}
};
Handler handler = new Handler();
handler.postDelayed(runnable, 200); // 200ms or whatever delay looks good

如果您足够绝望,这可能会给您想要的东西。

关于删除列表项上的 Android 平滑过渡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44349519/

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