2010-05-29 2 views
0

У меня есть OnTouch и setOnTouchListener, который обновляет varibles, которые содержат информацию о координатах экрана. Проблема в том, что он, похоже, никогда не обновляет их. В строке 78, RGB.setText (тест); он никогда не меняется с 0.0. Если бы я переместил эту строку и линию над ней в onTouch, она обновится. любая идея, что не так? Спасибо.Проблема с доступом к обновленным переменным в OnTouch

package com.evankimia.huskybus; 

импорт com.test.huskybus.R;

импорт android.app.Activity; import android.os.Bundle; импорт android.view.MotionEvent; импорт android.view.View; import android.view.View.OnTouchListener; импорт android.widget.TextView;

общественный класс HuskyBus расширяет активность {

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 (тест);

} 

} 

ответ

0

Он должен работать, если вы делаете это так:

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? 


    } 
} 

Проблема заключается в том, что у вас есть RGB.setText(test); вне исполнения TouchListener.

BTW, попробуйте организовать свой код перед публикацией здесь в StackOverflow.

+0

Спасибо, но я действительно пытаюсь получить переменные scrollByX и scrollByY, доступные для основного класса. У меня есть пользовательский вид, который ссылается на этот класс thisClass.scrollByX, но поскольку по какой-то причине переменные не обновляются в onTouchListener, он никогда не изменяется с 0. –

Смежные вопросы