java - 关于变量和屏幕触摸事件

标签 java android

我对这一切都很陌生,所以请耐心等待。 我想要做的:一旦用户触摸屏幕,就互换屏幕上两个方 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/

相关文章:

java - 继承会将类变成对象吗?

Java-过滤非法字符

android - 使用 nineoldandroids 库时动画 setInterpolator() 不工作

java - 如何从对象数组中的 Float 转换为 float 变量?

java - 应用程序停止使用 listview arrayadapter

java - 这是多态性吗?

java - Println 可执行文件的返回值

java - 无法转换为 ThreadPoolTask​​Executor

android-layout - ActionBar 实现

android - 如何在android中获取屏幕类型?