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?
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()
}
}
来源:https://stackoverflow.com/questions/22144690/how-to-display-a-button-in-random-screen-position