Reputation: 115
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?
Upvotes: 7
Views: 11203
Reputation: 410
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()
}
}
Upvotes: 0
Reputation: 132
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.
Upvotes: 2
Reputation: 4001
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>
Upvotes: 7
Reputation: 10342
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.
Upvotes: 0