Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android使用动画通过重力使物体落向地面_Java_Android_Animation_Gravity - Fatal编程技术网

Java Android使用动画通过重力使物体落向地面

Java Android使用动画通过重力使物体落向地面,java,android,animation,gravity,Java,Android,Animation,Gravity,我是Android开发的新手,我正在尝试在屏幕顶部创建一个图像,并使其下降到底部。我一直在环顾四周,无法得到一个直接的答案或指向正确方向的指针。我发现很多例子都过时了,很多方法都不再有效了 我在我的可绘制文件夹中有一个图像,我想在10秒后创建它,并让它像重力一样落向地面 我看过很多关于ObjectAnimator、canvas、velocity和动画的内容。我不知道从哪里开始。如果你想模拟真实的重力,这非常困难,需要你安装其他外部库。你还需要做大量的数学运算才能让重力发挥作用 真正的重力:物体会

我是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的图像,但它似乎对我不起作用。我会的今天晚些时候,再次感谢您作为答案输入的这是非常好的信息!