如何在android中的随机屏幕位置显示按钮?例如,我有一个名为GO的按钮。当我点击GO时,它会将我带到第二个屏幕。第二个屏幕将在随机屏幕位置显示另一个按钮(不是START按钮)。我怎么能这样做?
答案 0 :(得分:5)
对于第二个屏幕,使用absolute layout
,但是X = 0,Y = 0
第二个屏幕激活后。 onCreate
方法
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);
编辑用户想知道如何编写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>
答案 1 :(得分: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,您可以轻松地以随机屏幕位置移动视图(当它被触摸时)。
答案 2 :(得分:0)
如果您定位Icecream Sandwich
及以上,则可以非常轻松地设置按钮的位置
您可以使用以下功能移动到随机位置。您可以根据屏幕宽度随机计算x
。
v.setX(x);
v.setTranslationX(translationX);
对于较旧的手机,您可以制作0秒长的随机动画。
答案 3 :(得分:0)
这是我用来动画化视图在其Y轴上运动的(尽管Kotlin,但易于转换为Java)代码:
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()
}
}