何时使用setX和setY

时间:2015-08-11 21:12:19

标签: android nullpointerexception

我正在使用setX和setY来移动屏幕上的视图。但是,我读到android首先需要计算视图位置,否则它会给出NullPointerException(对我来说很开心)。 我需要知道何时才能使用它以避免异常。 直到现在我在onCreate()中使用它。 谢谢,祝你有个美好的一天

3 个答案:

答案 0 :(得分:1)

你绝对不能在onResume()之前或期间使用它。您需要设置全局布局侦听器,并且每当布局视图时,您都将移动视图。但是,这不是一个好主意,如果您希望在用户第一次看到应用程序时将视图设置在某个位置,最好只通过xml进行。

如果您希望视图在应用程序运行时移动,请查看Android动画类。

public class YourClass extends Activity implements ViewTreeObserver.OnGlobalLayoutListener {
View myView;
     @Override    
     onGlobalLayout() {
          myView.setx(100);
          myView.sety(100);

     }

     @Override
     onCreate(Bundle bundle) {
          super.onCreate(bundle);
          setContentView(layout);

          myView = findViewById(R.id.myView);
          myView.getViewTreeObserver().addOnGlobalLayoutListener(this);
     }
}

答案 1 :(得分:0)

在布局xml中应用转换的任何问题:

<View
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:translationX="10dp"
    android:translationY="10dp" />

发布更新,应该在下一个UI框架上运行:

myView.post(new Runnable() {
    @Override
    public void run() {
        myView.setX(50);
        myView.setY(50);
    }
});

答案 2 :(得分:0)

您可以在onCreate方法末尾使用一个对话框,在其中可以询问用户是否要继续。这将执行以下代码,并允许您在所需的任何位置设置视图(此处:按钮)。如果此解决方案可以应用于您的应用,请尝试检查如何使用对话框。它对我有用。

myDialog=new Dialog(this);
myDialog.setContentView(R.layout.my_dialog);
button_on_dialog=myDialog.findViewById(R.id.button_on_dialog);
button_on_dialog.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        button.setX(100f);
        myDialog.dismiss();
    }
});

myDialog.show();