How to display a button in random screen position

一世执手 提交于 2019-11-30 08:43:32

问题


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?


回答1:


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>



回答2:


    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.




回答3:


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.




回答4:


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()
    }
}


来源:https://stackoverflow.com/questions/22144690/how-to-display-a-button-in-random-screen-position

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