如何在随机屏幕位置显示按钮

问题描述 投票:6回答:4

如何在android中的随机屏幕位置显示按钮?例如,我有一个名为GO的按钮。当我点击GO时,它会将我带到第二个屏幕。第二个屏幕将在随机屏幕位置显示另一个按钮(不是START按钮)。我怎样才能做到这一点?

android button random relativelayout
4个回答
6
投票

对于第二个屏幕使用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>

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现已弃用,您可以轻松地以随机屏幕位置移动视图(当它被触摸时)。


0
投票

如果您以Icecream Sandwich及以上为目标,则可以非常轻松地设置按钮的位置您可以使用以下功能移动到随机位置。您可以根据屏幕宽度随机计算x

    v.setX(x);
    v.setTranslationX(translationX);

对于较旧的手机,您可以制作0秒长的随机动画。


0
投票

这是(虽然Kotlin,但很容易转换为Java)代码,我曾经在它的Y轴上为视图的运动设置动画:

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()
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.