Android 如何通过代码触发过卷动画?

Android 如何通过代码触发过卷动画?,android,listview,animation,android-canvas,overscroll,Android,Listview,Animation,Android Canvas,Overscroll,我试图通过代码触发ListView上的超卷动画。 波纹或辉光(你怎么称呼它?)应该出现在边缘上 我尝试了ListView中的所有功能,如scroll*或scrollSmooth*,其中没有一个可以触发动画 我还尝试了一些可以触发涟漪背景动画的解决方案,但它与此边缘效果不同 我是Android新手。如果有什么办法,请告诉我,谢谢 我还尝试使用onDraw(画布),因为我没有找到任何解决方案。因为我总是在iOS上做这种事情,所以我可以把效果画成动画。但这里还有一个问题,绘图速度太低,我不知道为什么

我试图通过代码触发ListView上的超卷动画。

波纹或辉光(你怎么称呼它?)应该出现在边缘上

我尝试了ListView中的所有功能,如scroll*或scrollSmooth*,其中没有一个可以触发动画

我还尝试了一些可以触发涟漪背景动画的解决方案,但它与此边缘效果不同

我是Android新手。如果有什么办法,请告诉我,谢谢


我还尝试使用onDraw(画布),因为我没有找到任何解决方案。因为我总是在iOS上做这种事情,所以我可以把效果画成动画。但这里还有一个问题,绘图速度太低,我不知道为什么,只是一些典型的stackoverflow绘图代码。后来我开始视图转换时,一切都搞砸了

我建议您使用
RecyclerView
来实现您的目的。默认情况下支持“Overscroll”动画

RecyclerView
在某种程度上与
ListView
非常相似,但它使处理动画更容易,或者强制您使用
ViewHolder模式。此外,它比
列表视图
灵活得多

然而在我个人看来,对简单用例使用
列表视图
而不是
回收视图
,仍然可以

那么创建一个需要哪些步骤呢?

添加依赖项

首先将依赖项添加到
app.gradle
文件中。您可以在
“Gradle Scripts->build.Gradle(Module:app)”
下找到此文件,或者只需按两次
选项卡,然后在搜索菜单中输入Gradle(搜索文件时非常有用:)。添加了以下依赖项:
implementation'com.android.support:recyclerview-v7:26.1.0'

或者,您可以通过搜索(
Layout.xml
文件并切换到
Design选项卡
),将RecyclerView从
设计器
拖放到布局(可以找到设计器)。这将自动为您添加依赖项

创建布局

与ListView完全相同(注意:此示例不使用
ConstraintLayout
作为父视图
ViewGroup
):

onCreateViewHolder:正如上面所说,必须创建一个新的
ViewHolder
这不是每次滚动时屏幕上都会弹出一个新项目时才调用的

onBindViewHolder:必须更新作为参数给定的
视图持有人的数据

getItemCount:this
RecyclerView
包含多少项

ViewHolder

class ExampleViewHolder extends RecyclerView.ViewHolder {
private TextView mTvText;

    public ExampleViewHolder(View itemView) {
        super(itemView);
        mTvText = itemView.findViewById(R.id.tv_text);
    }

    public TextView getTvText() {
        return mTvText;
    }
}
在这里,您只需提取视图,以便在调用
onBindViewHolder
方法时更新视图。it的布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="56dp">
<TextView
    android:id="@+id/tv_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>
</android.support.constraint.FrameLayout>
虽然我无法使用
列表视图直接解决您的问题,但我希望我仍然能够帮助您解决问题。由于我不知道您处于哪个级别,我希望我也能介绍一下如何设置基本的
RecyclerView
。为了更深入地理解,您应该查看以下有用的链接:

基本说明:

谈论输入动画:

添加onClick:

使用Kotlin:

物品的去皮:


Pro RecyclerView talk:

谢谢,但你没有回答我的问题。我知道recycleview,它与iOS上的CollectionView非常相似。但这不是我想做的。对不起:/但为什么要使用ListView?我想说,这很难重现。对于不同的速度,“保险杠”有不同的曲线,根据您开始移动的位置,曲线尖端将相应地移动到初始位置(在y轴上)。我不能向你保证,但我可能会研究一下,因为这听起来是一个需要解决的有趣问题。不过,我至少要花上今天的时间,如果不是更多的话,可能还要花上明天的时间,因为我有点忙:/对不起,我想这是滚动视图上常见的动画,不太确定。所以,我只选择其中一个进行测试,listview。我还没试过,但也许你应该看看这个:)?
class ExampleViewHolder extends RecyclerView.ViewHolder {
private TextView mTvText;

    public ExampleViewHolder(View itemView) {
        super(itemView);
        mTvText = itemView.findViewById(R.id.tv_text);
    }

    public TextView getTvText() {
        return mTvText;
    }
}
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="56dp">
<TextView
    android:id="@+id/tv_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>
</android.support.constraint.FrameLayout>
mRvExample.setHasFixedSize(true); //set this if every item has the same size - performance gain
mRvExample.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
mRvExample.setAdapter(new RecyclerViewAdapter(Arrays.asList("asdf","asdfsdf"), getLayoutInflater());