【问题标题】:Problem accessing updated variables within OnTouch在 OnTouch 中访问更新的变量时出现问题
【发布时间】:2010-07-10 19:19:46
【问题描述】:

我有一个 OnTouch 和一个 setOnTouchListener 来更新包含屏幕坐标信息的变量。问题是它似乎永远不会更新它们。在第 78 行,RGB.setText(test);它永远不会从 0.0 改变。如果我将该线及其上方的线移动到 onTouch 中,它会更新。知道有什么问题吗?谢谢。

package com.evankimia.huskybus;

导入 com.test.huskybus.R;

导入android.app.Activity; 导入android.os.Bundle; 导入 android.view.MotionEvent; 导入android.view.View; 导入 android.view.View.OnTouchListener; 导入android.widget.TextView;

公共类 HuskyBus 扩展 Activity {

TextView RGB;
private CampusMap mCampusMap;

private float startX = 0; //track x from one ACTION_MOVE to the next
private float startY = 0; //track y from one ACTION_MOVE to the next
float scrollByX = 0; //x amount to scroll by
float scrollByY = 0; //y amount to scroll by

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {


            super.onCreate(savedInstanceState);



            setContentView(R.layout.main);

            RGB = (TextView) findViewById(R.id.coordBox);

            mCampusMap = (CampusMap) findViewById(R.id.map);
            mCampusMap.setOnTouchListener(new OnTouchListener() {

                                    @Override
                                    public boolean onTouch(View v, MotionEvent event) {
                                            // TODO Auto-generated method stub



                                            switch (event.getAction()) {

                    case MotionEvent.ACTION_DOWN:
                            // Remember our initial down event location.

                            startX = event.getRawX();
                            startY = event.getRawY();
                            break;

                    case MotionEvent.ACTION_MOVE:
                            float x = event.getRawX();

                            float y = event.getRawY();
                            // Calculate move update. This will happen many times
                            // during the course of a single movement gesture.

                            scrollByX = x - startX; //move update x increment
                            scrollByY = y - startY; //move update y increment

                            startX = x; //reset initial values to latest
                            startY = y;



                            mCampusMap.invalidate();

                            break;
            }//end switch
                                            return false;
                                    }
                                    ;

            }); //end onDraw?

字符串测试 = "" + scrollByX; RGB.setText(test);

    }

 }

【问题讨论】:

    标签: android ontouchlistener


    【解决方案1】:

    如果你这样做,它应该可以工作:

    package com.evankimia.huskybus;
    
    import com.test.huskybus.R;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.View.OnTouchListener;
    import android.widget.TextView;
    
    public class HuskyBus extends Activity {
        TextView RGB;
        private CampusMap mCampusMap;
    
        private float startX = 0; // track x from one ACTION_MOVE to the next
        private float startY = 0; // track y from one ACTION_MOVE to the next
        float scrollByX = 0; // x amount to scroll by
        float scrollByY = 0; // y amount to scroll by
    
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
    
            super.onCreate(savedInstanceState);
    
            setContentView(R.layout.main);
    
            RGB = (TextView) findViewById(R.id.coordBox);
    
            mCampusMap = (CampusMap) findViewById(R.id.map);
            mCampusMap.setOnTouchListener(new OnTouchListener() {
    
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    // TODO Auto-generated method stub
    
                    switch (event.getAction()) {
    
                    case MotionEvent.ACTION_DOWN:
                        // Remember our initial down event location.
    
                        startX = event.getRawX();
                        startY = event.getRawY();
                        break;
    
                    case MotionEvent.ACTION_MOVE:
                        float x = event.getRawX();
    
                        float y = event.getRawY();
                        // Calculate move update. This will happen many times
                        // during the course of a single movement gesture.
    
                        scrollByX = x - startX; // move update x increment
                        scrollByY = y - startY; // move update y increment
    
                        startX = x; // reset initial values to latest
                        startY = y;
    
                        mCampusMap.invalidate();
    
                        break;
                    }// end switch
                    String test = "" + scrollByX;
                    RGB.setText(test);
                    return false;
                };
    
            }); // end onDraw?
    
    
        }
    }
    

    问题是您在 TouchListener 执行之外有 RGB.setText(test);

    顺便说一句,在 StackOverflow 上发布之前,请尝试整理您的代码。

    【讨论】:

    • 谢谢,但我真正想做的是让主类可以访问变量 scrollByX 和 scrollByY。我有一个自定义视图,通过 thisClass.scrollByX 引用此类,但由于某种原因,变量不会在 onTouchListener 中更新,它永远不会从 0 更改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-08
    相关资源
    最近更新 更多