小编Rom*_*nko的帖子

在Android的RecyclerView中检测动画完成

RecyclerView,不像到ListView,没有一个简单的方法来设置空视图,所以人们必须手动管理它,使空视图在适配器的项目数的情况下,可见是0.

实现这一点,起初我尝试在修改底层结构(ArrayList在我的情况下)后立即调用空视图逻辑,例如:

btnRemoveFirst.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        devices.remove(0); // remove item from ArrayList
        adapter.notifyItemRemoved(0); // notify RecyclerView's adapter
        updateEmptyView();
    }
});
Run Code Online (Sandbox Code Playgroud)

它做了这件事,但有一个缺点:当删除最后一个元素时,在删除动画完成之前立即显示空视图.所以我决定等到动画结束然后更新UI.

令我惊讶的是,我找不到在RecyclerView中监听动画事件的好方法.首先想到的是使用这样的isRunning方法:

btnRemoveFirst.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        devices.remove(0); // remove item from ArrayList
        adapter.notifyItemRemoved(0); // notify RecyclerView's adapter
        recyclerView.getItemAnimator().isRunning(new RecyclerView.ItemAnimator.ItemAnimatorFinishedListener() {
            @Override
            public void onAnimationsFinished() {
                updateEmptyView();
            }
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

不幸的是,在这种情况下回调立即运行,因为在那一刻内部ItemAnimator仍然没有处于"运行"状态.所以,问题是:如何正确使用ItemAnimator.isRunning()方法,是否有更好的方法来实现所需的结果,即在单个元素的删除动画完成后显示空视图 …

animation android android-recyclerview

32
推荐指数
2
解决办法
1万
查看次数

如果将ArrayList引用为List,为什么ArrayList性能会有所不同?

kjellkod的文章中提到过,如果我们传入作为参数ArrayList接收的方法List,那么我们会失去性能,因为ArrayList实现了额外的RandomAccess接口.文章示例:

// SLOWER: as shown in http://ideone.com/1wnF1
private static void linearInsertion(Integer[] intArray, List<Integer> list) {
[...]
int list_size = list.size();
for (int i = 0; i < list_size; i++) {
if (integer.compareTo(list.get(i)) >= 0) { // ... more code

// FASTER: as shown in http://ideone.com/JOJ05
private static void linearInsertion(Integer[] intArray, ArrayList<Integer> list) {
[...]
int list_size = list.size();
for (int i = 0; i < list_size; i++) {
if (integer.compareTo(list.get(i)) >= 0) …
Run Code Online (Sandbox Code Playgroud)

java iteration time arraylist random-access

13
推荐指数
1
解决办法
314
查看次数

Flutter中的无边框选择高亮效果

背景:我正在使用 Flutter 重写我的 Android 应用程序。View在 Android 上,当将 clickable的background属性设置为 时,会出现这种有趣的触摸反馈效果?android:selectableItemBackgroundBorderless

在此输入图像描述

请注意,红色边框不在真正的 UI 中,它只是为了显示 的View边框。正如您所看到的,墨水形成了一个围绕矩形视图的圆圈。

我希望 Flutter 应用程序中的墨迹也围绕视图进行限制,即选择区域需要是圆形的并包围视图。我试图通过使用InkResponse组件来实现这一点,但结果看起来很悲惨:

在此输入图像描述

Scaffold示例中使用的主体:

body: Center(
  // Center is a layout widget. It takes a single child and positions it
  // in the middle of the parent.
  child: Material(
    color: Color(0xff008080),
    child: Center(
      child: InkResponse(
        onTap: () {
          /* ... */
        },
        child: Container(
          child: Center(
            child: Text('BUTTON'),
          ),
          decoration: BoxDecoration(
            border: …
Run Code Online (Sandbox Code Playgroud)

android android-layout material-design flutter flutter-layout

5
推荐指数
1
解决办法
1684
查看次数