Android使用动画使对象使用重力落在地面

时间:2016-01-25 04:49:31

标签: java android animation gravity

我是Android开发的新手,我正在尝试在屏幕顶部创建一个图像并使其落到最底层。我一直在环顾四周,无法在正确的方向上得到正确的答案或指针。我发现的很多例子已经过时了,很多方法都不再适用了。

我的可绘制文件夹中有一个图像,我希望在10秒后创建它并让它像重力一样落在地面上。

我见过很多关于ObjectAnimator,画布,速度,动画的内容。我不知道从哪里开始。

3 个答案:

答案 0 :(得分:4)

请务必查看ViewPropertyAnimator课程及其方法。 对于加速和弹跳等,有所谓的插值器,使动画更逼真/逼真。我能想到的最简单的方法就是这样:

假设你有一个RelativeLayout作为Parent而一个ImageView作为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>

然后在Java代码中启动这样的动画:

ImageView imageView = (ImageView) findViewById(R.id.your_image);

float bottomOfScreen = getResources().getDisplayMetrics()
    .heightPixels - (imageView.getHeight() * 4);
        //bottomOfScreen is where you want to animate to

imageView.animate()
    .translationY(bottomOfScreen)
    .setInterpolator(new AccelerateInterpolator())
    .setInterpolator(new BounceInterpolator())
    .setDuration(2000);

这应该让你开始。

答案 1 :(得分:0)

如果您想模拟真正的重力,那么它非常困难,需要您安装其他外部库。你还需要做很多数学运算才能使重力发挥作用。

真正的引力:事物会加速和反弹以及其他东西

但是如果你只是希望某些东西以恒定的速度从上到下掉落(没有加速度),那就更容易了。

您只需在项目的<input type="submit" value="Do thing" disabled> 文件夹中创建一个新的xml文件,然后将其加载到您的代码中。有很多教程可以做到这一点:http://developer.android.com/guide/topics/graphics/view-animation.html

这真的很容易! (XML的东西总是很简单,不是吗?)

答案 2 :(得分:0)

摘录:

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);   

关键是我们需要从处理固定fps的正在运行的线程的外部句柄调用用户界面主线程的更新。

有关完整代码,请点击此处: Thread Runnable Handle to Graphic Animation Bouncing Ball like Pixels