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