How to display a button in random screen position

烈酒焚心 提交于 2019-11-29 07:14:09

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>
    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()
    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!