Frage

How do I display a button in a random screen position in android? For example I have a button that is named GO. When I click GO, it will bring me to the second screen. That second screen will display another button (not the START button) in random screen position. How can I do that?

War es hilfreich?

Lösung

For the second screen use absolute layout, but the button on X=0, Y=0

Once your second screen gets activated. onCreate Method

Button button = (Button)findViewById(R.id.my_button);
AbsoluteLayout.LayoutParams absParams = 
    (AbsoluteLayout.LayoutParams)button.getLayoutParams();

DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int width = displaymetrics.widthPixels;
int height = displaymetrics.heightPixels;


Random r = new Random();

absParams.x =  r.nextInt(width ) ;
absParams.y =  r.nextInt(height );
button.setLayoutParams(absParams);

EDIT User wanted to know how to write AbsoluteLayout

<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
  <Button
        android:id="@+id/my_button"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_x="0dp"
        android:layout_y="0dp"
        android:text="Yes" />
</AbsoluteLayout>

Andere Tipps

    displaymatrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(displaymatrics);

    textview.setOnTouchListener(new View.OnTouchListener(){

        Random R = new Random();
        float dx = R.nextFloat() * displaymatrics.widthPixels;
        float dy = R.nextFloat() * displaymatrics.heightPixels;

        public boolean onTouch(View view, MotionEvent event){

            if(event.getAction() == MotionEvent.ACTION_DOWN){

                        view.animate()
                                .x(dx)
                                .y(dy)
                                .setDuration(0)
                                .start();
            }
            return true;
        }
    });

AbsoluteLayout is now deprecated, You can move a View(when it's touched) in random screen position this way easily.

If you target Icecream Sandwich and above, you can set the position of the button very easily You can use the below functions to move to a random position. You can calculate x randomly based on the screen width.

    v.setX(x);
    v.setTranslationX(translationX);

For the older phones, you can make a random animation with 0 second long.

This is the (though Kotlin, but easy to convert to Java) code I used to animate a movement of a view on it's Y axis:

private fun moveViewRandomlyOnVerticalAxis(view: View, topMarginPixels: Int, bottomMarginPixels: Int)
{
    /* get current activity screen size in pixel **/
    val metrics = DisplayMetrics()
    windowManager.defaultDisplay.getMetrics(metrics)
    val windowHeight = metrics.heightPixels

    val viewTopPixels = view.top
    val verticalPixelsToMove = Random.nextInt(-viewTopPixels + topMarginPixels, windowHeight 
            - viewTopPixels + 1).toFloat()
    ObjectAnimator.ofFloat(view, "translationY", verticalPixelsToMove).apply {
        duration = 500
        start()
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top