我对这一切都很陌生,所以请耐心等待。 我想要做的:一旦用户触摸屏幕,就互换屏幕上两个方 block 的位置。 到目前为止我所做的:在我的布局 xml 中,我使用了框架布局端定义了两个正方形:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/frame1"
android:layout_width="260dp"
android:layout_height="540dp"
android:layout_gravity="center_horizontal" >
<EditText
android:id="@+id/square1"
android:enabled="false"
android:layout_width="50dp"
android:layout_height="50dp"
android:background="@drawable/textlines"
android:clickable="false"
android:gravity="center"
android:inputType="none"
android:text="@string/C1"
android:textSize="25sp" />
<EditText
android:id="@+id/square2"
android:enabled="false"
android:layout_width="50dp"
android:layout_height="50dp"
android:background="@drawable/textlines"
android:clickable="false"
android:gravity="center"
android:inputType="none"
android:text="@string/C2"
android:textSize="25sp" />
然后在 Java 中,我完成了以下操作:
public class Activity1 extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout1);
EditText square1 = (EditText) findViewById(R.id.square1);
int cc1x = 210;
int cc1y = 410;
square1.setX(cc1x);
square1.setY(cc1y);
EditText square2 = (EditText) findViewById(R.id.square2);
int cc2x = 310;
int cc2y = 410;
square2.setX(cc2x);
square2.setY(cc2y);
int ccdumx = 410;
int ccdumy = 410;
}
为了获得初始屏幕 - 到目前为止一切顺利。 ccdumx 和 ccdumy 这两个变量只是在交换两个方 block 时中间存储它们之一 所以现在我添加一个事件监听器来检测屏幕触摸,然后更改坐标变量:
@Override
public boolean onTouchEvent(MotionEvent event) {
ccdumx = cc1x;
ccdumy = cc1y;
cc1x = cc2x;
cc1y = cc2y;
cc2x = ccdumx;
cc2y = ccdumy;
square1.setX(cc1x);
square1.setY(cc1y);
square2.setX(cc2x);
square2.setY(cc2y);
}
但是变量无法识别,方 block 的名称也无法识别。当我在这个集团中再次声明它们时,它确实有效,但随后我的逻辑仅有效一次;我无法将方 block 切换回来,因为坐标的变量总是由声明重置,然后是位置的切换...我有点卡在这里我想也许先切换到另一个 Activity ,但又再次,我可能也有同样的问题...非常感谢任何帮助。 附言。我希望代码的格式能够正常,对我来说是第一次。如果没有,请接受我的歉意。
最佳答案
因为所有这些变量都是方法 onCreate()
的本地变量。您需要将它们全局定义到整个类,即外部方法 onCreate()
。
你的问题第一 block 中的java代码应该更改为这个。
public class Activity1 extends ActionBarActivity {
int cc1x, cc1y, cc2x, cc2y, ccdumx, ccdumy;
EditText square1, square2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout1);
square1 = (EditText) findViewById(R.id.square1);
cc1x = 210;
cc1y = 410;
square1.setX(cc1x);
square1.setY(cc1y);
square2 = (EditText) findViewById(R.id.square2);
cc2x = 310;
cc2y = 410;
square2.setX(cc2x);
square2.setY(cc2y);
ccdumx = 410;
ccdumy = 410;
}
//... rest of the code
关于java - 关于变量和屏幕触摸事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27359494/