2013-03-15 2 views
1

В моем приложении код для жестов салфетки отлично работает на эмуляторе. Но тот же код выходит из строя, когда я тестирую его на физическом устройстве (вкладка Galaxy). Я использую некоторые коды и результаты журнала. Любая помощь приветствуется.Android Swipe gesture не работает

Это класс в моей деятельности, который реализует салфетки.

package com.example.testflashfile; 

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.content.pm.ActivityInfo; 
import android.os.Bundle; 
import android.view.GestureDetector; 
import android.view.GestureDetector.SimpleOnGestureListener; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.Window; 
import android.widget.Button; 
import android.widget.TextView; 
import android.view.MotionEvent; 
import com.example.testflashfile.GlobalVariables; 


public class MainActivity extends Activity 
{ 
    Button nextButton; 
    Button playButton; 
    Button backButton; 
    Context contextObject; 
    GestureDetector gestureDetector; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); 
     setContentView(R.layout.activity_main); 

     ReadText readText=new ReadText(this); 
     TextView helloTxt = (TextView)findViewById(R.id.displaytext); 

     String fileName="textone"; 
     helloTxt.setText(readText.readTxt(fileName)); 

     gestureDetector = new GestureDetector(this.getApplicationContext(),new MyGestureDetector()); 
     View mainview = (View) findViewById(R.id.mainView); 

     // Set the touch listener for the main view to be our custom gesture listener 
     mainview.setOnTouchListener(new View.OnTouchListener() { 
      public boolean onTouch(View v, MotionEvent event) { 
       if (gestureDetector.onTouchEvent(event)) { 
        return true; 
       } 
       return false; 
      } 
     }); 


     playButton=(Button)findViewById(R.id.play); 
     playButton.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       Intent startAnimation=new Intent(MainActivity.this,PlayAnimationActivity.class); 
       startAnimation.putExtra("SWF_NAME","a"); 
       startActivity(startAnimation); 
      } 
     }); 



     nextButton=(Button)findViewById(R.id.next); 
     nextButton.setOnClickListener(new OnClickListener() { 


      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       Intent intent=new Intent(MainActivity.this,SecondActivity.class); 
       startActivity(intent); 

      } 
     }); 

     backButton=(Button)findViewById(R.id.back); 
     backButton.setOnClickListener(new OnClickListener() { 


      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       Intent intent=new Intent(MainActivity.this,FifthActivity.class); 
       startActivity(intent); 

      } 
     }); 


    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 


    public class MyGestureDetector extends SimpleOnGestureListener 
    { 


     @Override 
     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 


      if (Math.abs(e1.getY() - e2.getY()) > GlobalVariables.SWIPE_MAX_OFF_PATH) { 
       return false; 
      } 

      // right to left swipe 
      if(e1.getX() - e2.getX() > GlobalVariables.SWIPE_MIN_DISTANCE && Math.abs(velocityX) > GlobalVariables.SWIPE_THRESHOLD_VELOCITY) { 

       Intent i= new Intent(MainActivity.this,SecondActivity.class); 
       startActivity(i); 

       // left to right swipe 
      } else if (e2.getX() - e1.getX() > GlobalVariables.SWIPE_MIN_DISTANCE && Math.abs(velocityX) > GlobalVariables.SWIPE_THRESHOLD_VELOCITY) { 


       Intent i= new Intent(MainActivity.this,FifthActivity.class); 
       startActivity(i); 

      } 

      return false; 
     } 


     @Override 
     public boolean onDown(MotionEvent e) { 
      return true; 
     } 



    } 

} 

Результат журнала кошка:

03-15 11:25:39.369: D/OpenGLRenderer(10179): Enabling debug mode 0 
03-15 11:25:42.611: E/InputEventReceiver(10179): Exception dispatching input event. 
03-15 11:25:42.611: D/AndroidRuntime(10179): Shutting down VM 
03-15 11:25:42.611: W/dalvikvm(10179): threadid=1: thread exiting with uncaught exception (group=0x419442a0) 
03-15 11:25:42.619: E/AndroidRuntime(10179): FATAL EXCEPTION: main 
03-15 11:25:42.619: E/AndroidRuntime(10179): java.lang.IllegalArgumentException: pointerIndex out of range 
03-15 11:25:42.619: E/AndroidRuntime(10179): at android.view.MotionEvent.nativeGetAxisValue(Native Method) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at android.view.MotionEvent.getY(MotionEvent.java:2090) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at android.widget.ScrollView.onTouchEvent(ScrollView.java:848) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at android.view.View.dispatchTouchEvent(View.java:7340) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2181) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1914) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2187) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1929) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2187) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1929) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2187) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1929) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2187) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1929) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2113) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1466) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at android.app.Activity.dispatchTouchEvent(Activity.java:2468) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2061) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at android.view.View.dispatchPointerEvent(View.java:7525) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3370) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3302) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4394) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4372) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:4476) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:171) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:163) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:4444) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:4495) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at android.view.Choreographer.doCallbacks(Choreographer.java:555) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at android.view.Choreographer.doFrame(Choreographer.java:523) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at android.os.Handler.handleCallback(Handler.java:615) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at android.os.Handler.dispatchMessage(Handler.java:92) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at android.os.Looper.loop(Looper.java:137) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at android.app.ActivityThread.main(ActivityThread.java:4895) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at java.lang.reflect.Method.invokeNative(Native Method) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at java.lang.reflect.Method.invoke(Method.java:511) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:994) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:761) 
03-15 11:25:42.619: E/AndroidRuntime(10179): at dalvik.system.NativeStart.main(Native Method) 
+1

Это не проблема жестов салфетки, а в вашем MainActivity, имя файла, которое вы пытаетесь прочитать, возвращает null – Pragnani

+0

@Pragnani Я не понимаю. Как это работает на эмуляторе? –

+0

Попытайтесь понять, что я говорю, вы можете проверить салфетки на своем эмуляторе. Но проблема не в салфетке, а у вас есть FileNotFoundException. Потому что вы пытаетесь прочитать текстовый файл, а имя файла текста равно – Pragnani

ответ

3
mainview.setOnTouchListener(new View.OnTouchListener() { 
      public boolean onTouch(View v, MotionEvent event) { 
       if (gestureDetector.onTouchEvent(event)) { 
        return false; 
       } 
       return true; 
      } 
     }); 

это правильный способ сделать это. Теперь он работает на устройстве. Но я до сих пор не понимаю, как это работает на эмуляторе. Если кто-то может понять это, тогда, пожалуйста, скажите мне. Спасибо.

0

Вы передаете нуль в качестве вклада в readTxt(null); в классе Read, вместо того, чтобы отправить имя файла в конструкторе и передать имя файла readTxt в том или удалить readTxt (нуль) в классе Read

+0

Мой текстовый файл, который является тем, который Я хочу отображать, показывается на текстовом фоне, отличном от filenotfoundexception. как это может быть? –

+0

Поскольку вы вызываете helloTxt.setText (readText.readTxt (fileName)); после установки вашего класса чтения – Pragnani

+0

@abhi_is_learning_android, но readTxt (null) вызывает, когда вы его создаете сначала – Pragnani

0

проблема здесь

public class ReadText { 
    Context context; 
    public ReadText(Context c) { 
     context = c; 
     readTxt(null); 
    } 

нуль это ключевое слово в Java .. так и нужно изменить имя файла первого, которое есть папка assts (null.txt), после того, что с помощью этого файла в коде ...

+0

Я отредактировал вопрос. Пожалуйста, обратите внимание –

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