Java Android使用动画通过重力使物体落向地面
我是Android开发的新手,我正在尝试在屏幕顶部创建一个图像,并使其下降到底部。我一直在环顾四周,无法得到一个直接的答案或指向正确方向的指针。我发现很多例子都过时了,很多方法都不再有效了 我在我的可绘制文件夹中有一个图像,我想在10秒后创建它,并让它像重力一样落向地面 我看过很多关于ObjectAnimator、canvas、velocity和动画的内容。我不知道从哪里开始。如果你想模拟真实的重力,这非常困难,需要你安装其他外部库。你还需要做大量的数学运算才能让重力发挥作用 真正的重力:物体会加速、反弹等 但是,如果你只是想让某样东西以恒定的速度(没有加速度)从上到下下落,那就容易多了 您只需要在项目的Java Android使用动画通过重力使物体落向地面,java,android,animation,gravity,Java,Android,Animation,Gravity,我是Android开发的新手,我正在尝试在屏幕顶部创建一个图像,并使其下降到底部。我一直在环顾四周,无法得到一个直接的答案或指向正确方向的指针。我发现很多例子都过时了,很多方法都不再有效了 我在我的可绘制文件夹中有一个图像,我想在10秒后创建它,并让它像重力一样落向地面 我看过很多关于ObjectAnimator、canvas、velocity和动画的内容。我不知道从哪里开始。如果你想模拟真实的重力,这非常困难,需要你安装其他外部库。你还需要做大量的数学运算才能让重力发挥作用 真正的重力:物体会
anim
文件夹中创建一个新的xml文件,并将其加载到代码中。有很多教程可以做到这一点:
这真的很容易!(XML内容总是很容易的,不是吗?一定要检查类及其方法。
对于加速和反弹等,有所谓的插值器,使动画更逼真/逼真。我能想到的最简单的方法是这样:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/your_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:src="@mipmap/ic_launcher" />
</RelativeLayout>
假设在xml文件中有一个RelativeLayout作为父对象,一个ImageView作为子对象,如下所示:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/your_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:src="@mipmap/ic_launcher" />
</RelativeLayout>
这应该让你开始了。摘录:
Handler h=new Handler();
ImageView img;
Runnable r= new Runnable()
{
@Override public void run() {img.invalidate();}
};
@Override
protected void onCreate(Bundle b)
{
super.onCreate(b);
p.setColor(Color.RED);
p.setStyle(Paint.Style.FILL_AND_STROKE);
p.setDither(false);
p.setStrokeWidth(3);
p.setAntiAlias(true);
p.setColor(Color.parseColor("#CD5C5C"));
p.setStrokeWidth(15);
p.setStrokeJoin(Paint.Join.ROUND);
p.setStrokeCap(Paint.Cap.ROUND);
img=new ImageView(this)
{
@Override protected void onDraw(Canvas cnv)
{
x+=i;
y+=j;
if(x>300)i=-1;
if(y>300)j=-1;
if(x<0)i=1;
if(y<0)j=1;
cnv.drawPoint(x,y,p);
h.postDelayed(r,fps);
Handler h=new Handler();
图像视图img;
Runnable r=新的Runnable()
{
@重写公共void run(){img.invalidate();}
};
@凌驾
创建时受保护的void(束b)
{
super.onCreate(b);
p、 setColor(Color.RED);
p、 设置样式(绘制、样式、填充和笔划);
p、 设置抖动(假);
p、 设定行程宽度(3);
p、 setAntiAlias(真);
p、 setColor(Color.parseColor(#CD5C5C”);
p、 设定行程宽度(15);
p、 设置行程连接(油漆、连接、圆形);
p、 调整行程盖(油漆盖圆形);
img=新图像视图(本)
{
@覆盖受保护的void onDraw(画布cnv)
{
x+=i;
y+=j;
如果(x>300)i=-1;
如果(y>300)j=-1;
如果(xI看到了一些优势,但是随着级别的增加,我希望能够提高速度,并使其随机出现在屏幕顶部的x上,是否还有一种方法可以模拟;反弹效果’?您有没有一些来源供我参考?:)非常感谢你,顺便问一下,你是什么意思?教程?哦,对不起,别介意你说什么是“ViewPropertyAnimator”。再次感谢!谢谢,在旁注上,你知道如何进行碰撞吗?当我的图像掉下来时,我希望它反弹为线性布局。我见过一些使用rect.intersect的图像,但它似乎对我不起作用。我会的今天晚些时候,再次感谢您作为答案输入的这是非常好的信息!