2013-05-20 7 views
8

Ich arbeite an einer Android-App, wo es etwa 6 Tasten auf dem Bildschirm gibt (die ein entsprechendes Video wiedergeben, wenn gedrückt). Hier ist ein Mock-up, was die Anwendung wie folgt aussieht:Die Tasten bewegen sich automatisch um den Bildschirm

Android App

ich die Tasten möchten automatisch (und zufällig) bewegen sich auf dem Bildschirm. Sie sollten das unabhängig machen, dh sie können vor (oder hinter) anderen Knöpfen gehen - sie müssen sich nicht gegenseitig abstoßen oder Ähnliches. Im Idealfall wäre es gut, wenn sich die Schaltflächen tatsächlich etwas von der Leinwand entfernen lassen (wie im Bild oben zu sehen ist, wobei die Schaltfläche hinter der Aktionsleiste angezeigt wird). Dies ist jedoch nicht unbedingt erforderlich.

Wie würde ich die Tasten so bewegen?

+0

Hast du es verstanden? Wie hast du es gemacht? –

Antwort

4

Ich glaube, dass Sie verwenden müssen. Weitere Informationen dazu, wie Sie weiter gehen, finden Sie unter this. Der Pfad, den Sie einer Ansicht geben sollten, sollte jedes Mal zufällig sein. Überprüfen Sie klar this auch für die Dinge, die Sie beachten müssen.

Ein Auszug aus den api Führungen:

Zum Beispiel, wenn Sie ein button to move across the screen animieren, zieht die Taste richtig, aber der tatsächliche Ort, an dem Sie auf die Schaltfläche klicken, können nicht geändert werden, so dass Sie implementieren müssen Ihre eigene Logik, um damit umzugehen.

+0

Macht es Ihnen etwas vor, ein Beispiel zu geben? Vielen Dank. Ich habe gemocht –

1

Sie können alle Schaltflächen in einem RelativeLayout hinzufügen und den Rand ändern, um die Schaltfläche verschieben zu positionieren.
die Position initialisieren Code unten:

Button button = new Button(); 
    params = new RelativeLayout.LayoutParams(btnHeight, 
          btnWidth); 
    params.leftMargin = leftMargin; 
    params.topMargin = topMargin; 
    rootview.addView(button, params); 

den Knopf zu bewegen, Sie TranslateAnimation

5

Kürzlich verwenden könnte, ich habe die ähnlich mit Animationen und versucht zu spielen. Hier ist die Klasse. Es springt im Grunde um die übergeordneten Ansicht (die Sie die Mathematik verändern, weiter zu gehen)

package com.example.animationtests.view; 

import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.Canvas; 
import android.graphics.drawable.BitmapDrawable; 
import android.graphics.drawable.Drawable; 
import android.util.AttributeSet; 
import android.view.View; 
import android.widget.ImageView; 

public class BouncingImageView extends ImageView { 

    private View mParent; 

    public BouncingImageView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    public BouncingImageView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public BouncingImageView(Context context) { 
     super(context); 
    } 

    @Override 
    protected void onAttachedToWindow() { 
     super.onAttachedToWindow(); 
     mParent = (View) getParent(); 
     getHandler().post(mRunnable); 
    } 

    @Override 
    protected void onDetachedFromWindow() { 
     getHandler().removeCallbacks(mRunnable); 
     super.onDetachedFromWindow(); 
    } 

    private final Runnable mRunnable = new Runnable() { 
     private static final int DIRECTION_POSITIVE = 1; 
     private static final int DIRECTION_NEGATIVE = -1; 
     private static final int ANIMATION_STEPS = 1; 
     private int mHorizontalDirection = DIRECTION_POSITIVE; 
     private int mVerticalDirection = DIRECTION_NEGATIVE; 

     public boolean mStarted = false; 

     @Override 
     public void run() { 
      if (mParent == null) { 
       return; 
      } 

      final float width = getMeasuredWidth(); 
      final float height = getMeasuredHeight(); 
      final float parentWidth = mParent.getMeasuredWidth(); 
      final float parentHeight = mParent.getMeasuredHeight(); 
      float x = getX(); 
      float y = getY(); 

      if (!mStarted) { 
       /*** 
       * Randomize initial position 
       */ 
       x = (float) Math.random() * (parentWidth - width); 
       y = (float) Math.random() * (parentHeight - height); 
       mHorizontalDirection = ((int) x % 2 == 0) ? DIRECTION_NEGATIVE : DIRECTION_POSITIVE; 
       mVerticalDirection = ((int) y % 2 == 0) ? DIRECTION_NEGATIVE : DIRECTION_POSITIVE; 
       mStarted = true; 
      } else { 
       if (mHorizontalDirection == DIRECTION_NEGATIVE) { 
        x -= ANIMATION_STEPS; 
       } else { 
        x += ANIMATION_STEPS; 
       } 

       if (mVerticalDirection == DIRECTION_NEGATIVE) { 
        y -= ANIMATION_STEPS; 
       } else { 
        y += ANIMATION_STEPS; 
       } 

       if (x - (width/3) < 0) { 
        mHorizontalDirection = DIRECTION_POSITIVE; 
       } else if (x + (width/3) > (parentWidth - width)) { 
        mHorizontalDirection = DIRECTION_NEGATIVE; 
       } 

       if (y - (height/3) < 0) { 
        mVerticalDirection = DIRECTION_POSITIVE; 
       } else if (y + (width/3) > (parentHeight - height)) { 
        mVerticalDirection = DIRECTION_NEGATIVE; 
       } 
      } 

      setX(x); 
      setY(y); 

      getHandler().post(this); 
     } 
    }; 
} 

Verbrauch:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".BouncingCircles" > 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="300dp" 
     android:layout_alignParentBottom="true" > 

     <com.example.animationtests.view.BouncingImageView 
      android:layout_width="50dp" 
      android:layout_height="50dp" 
      android:src="@drawable/light_dino" /> 

     <com.example.animationtests.view.BouncingImageView 
      android:layout_width="40dp" 
      android:layout_height="40dp" 
      android:src="@drawable/light_dino" /> 

     <com.example.animationtests.view.BouncingImageView 
      android:layout_width="70dp" 
      android:layout_height="70dp" 
      android:src="@drawable/light_dino" /> 

     <com.example.animationtests.view.BouncingImageView 
      android:layout_width="90dp" 
      android:layout_height="90dp" 
      android:src="@drawable/light_dino" /> 
    </RelativeLayout> 

</RelativeLayout> 
0

Versuchen Sie, diese

ObjectAnimator mover = ObjectAnimator.ofFloat(aniView, 
       "translationX", -500f, 0f); 
      mover.setDuration(2000); 

Satz diese Animation auf Ihre Schaltfläche

Verwandte Themen