2015-02-20 8 views
0

У меня есть активность, которая реализует onGestureListener, и у меня есть код в его методе onFling. Макет xml, который я использую для этого действия, содержит линейную компоновку (вертикальную), переносящую относительный макет и собственный класс макета.GestureDetector работает только с частью деятельности

Этот пользовательский класс макета расширяет относительную компоновку. Внутри этого пользовательского класса макета у меня есть readerView (из библиотеки Mupdf для открытия PDF-файлов). Когда я прокручиваю часть относительной компоновки, она отлично работает, но когда я сажусь на свой собственный макет (pdfLayout), он не обнаруживает жест. Я даже настроил прослушиватель прикосновений для pdfLayout на onCreate. Я понял, что метод onFling в ReaderView, который находится внутри PdfLayout, вызывается, когда я прокручиваю PdfLayout. Я не понимаю, как общаться с моей деятельностью с моим читателем, который находится внутри PdfLayout. Я не знаю, где я ошибся. Я ценю любую помощь!

Вот мой PdfActivity:

import java.io.File; 
    import android.annotation.SuppressLint; 
    import android.app.Activity; 
    import android.content.Context; 
    import android.content.Intent; 
    import android.graphics.Color; 
    import android.graphics.Typeface; 
    import android.net.Uri; 
    import android.os.Bundle; 
    import android.os.Environment; 
    import android.util.Log; 
    import android.view.MotionEvent; 
    import android.view.View; 
    import android.view.View.OnClickListener; 
    import android.view.View.OnTouchListener; 
    import android.view.Window; 
    import android.view.WindowManager; 
    import android.widget.ImageButton; 
    import android.widget.LinearLayout; 
    import android.widget.RelativeLayout; 
    import android.widget.TextView; 
    import android.view.GestureDetector; 
    import android.view.GestureDetector.OnGestureListener; 


    public class PdfActivity extends Activity implements OnGestureListener{ 

     private static final int SWIPE_MIN_DISTANCE = 120; 
     private static final int SWIPE_MAX_OFF_PATH = 250; 
     private static final int SWIPE_THRESHOLD_VELOCITY = 200; 

     static Context c; 
     static LinearLayout pdfLl; 
     PdfLayout pdfLayout; 
     static View buttons; 
     static RelativeLayout rl; 
     static String title; 
     TextView tv; 
     TextView page; 

     int n = 1; 
     int totalpages; 

     GestureDetector detector; 

     @SuppressWarnings("deprecation") 
     @SuppressLint("NewApi") 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      // TODO Auto-generated method stub 
      super.onCreate(savedInstanceState); 
      this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
      this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
      setContentView(R.layout.pdf_act); 

      detector=new GestureDetector(this); 

      View rootView = findViewById(R.layout.pdf_act); 

      pdfLl = (LinearLayout) findViewById(R.id.readerCont); 
      rl = (RelativeLayout) findViewById(R.id.buttonsCont); 
      pdfLayout = (PdfLayout) findViewById(R.id.pdfLayout); 
      ImageButton prev = (ImageButton) findViewById(R.id.prev); 
      ImageButton next = (ImageButton) findViewById(R.id.next); 
      tv = (TextView) findViewById(R.id.title); 
      page = (TextView) findViewById(R.id.pageNo); 
      page.setTextColor(Color.BLACK); 
      page.setTypeface(null, Typeface.ITALIC); 
      c = this; 
      Intent intent = getIntent(); 
      Uri uri = intent.getData(); 
      title = intent.getStringExtra("title"); 
      totalpages = intent.getIntExtra("totalpages", 1); 
      page.setText(n+" of "+totalpages+" Pages"); 

      tv.setTextColor(Color.BLACK); 
      tv.setTypeface(null, Typeface.BOLD_ITALIC); 
      tv.setText(title); 

      prev.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View paramView) { 
        // TODO Auto-generated method stub 
        Log.e("Pdf Act", "prev button clicked! & n="+n); 
        if(n>1 && n<=totalpages){ 
         pdfLayout.pre(); 
         n--; 
         File file = new File(Environment.getExternalStorageDirectory()+"/PaperBoy/AndhraBhoomi/AB"+n+".pdf"); 
         if(file.exists() && file!=null){ 
          pdfLayout.setCore(file.getAbsolutePath()); 
         } 
         else{ 
          pdfLayout.setCore(Environment.getExternalStorageDirectory()+"/pdpage.pdf"); 
         } 
         page.setText(n+" of "+totalpages+" Pages"); 
        } 
       } 
      }); 

      next.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        Log.e("Pdf Act", "next button clicked! & n="+n); 
        if(n>=1 && n<totalpages){ 
         pdfLayout.next(); 
         n++; 
         File file = new File(Environment.getExternalStorageDirectory()+"/PaperBoy/AndhraBhoomi/AB"+n+".pdf"); 
         if(file.exists() && file!=null){ 
          pdfLayout.setCore(file.getAbsolutePath()); 
         } 
         else{      pdfLayout.setCore(Environment.getExternalStorageDirectory()+"/pdpage.pdf"); 
         } 
         page.setText(n+" of "+totalpages+" Pages"); 
        } 
       } 
      }); 

      pdfLayout.setOnTouchListener(new OnTouchListener() { 

       @Override 
       public boolean onTouch(View paramView, MotionEvent paramMotionEvent) { 
        // TODO Auto-generated method stub 
        return detector.onTouchEvent(paramMotionEvent); 
       } 
      }); 
     } 

     @Override 
      protected void onPause() { 
       super.onPause(); 
       onStop(); 
      } 

     public void screenTapped(View view) { 
       Log.e("pdf act", "tapped"); 

       if(rl.getVisibility()==View.VISIBLE){ 
        rl.setVisibility(View.GONE); 
       } 

       if(rl.getVisibility()==View.GONE){ 
        rl.setVisibility(View.VISIBLE); 
       } 
      } 

     @Override 
      public boolean onTouchEvent(MotionEvent event) { 
       // TODO Auto-generated method stub 
       return detector.onTouchEvent(event); 
      } 

     @Override 
     public boolean onDown(MotionEvent paramMotionEvent) { 
      // TODO Auto-generated method stub 
      Log.e("Pdf Act", "on down gesture"); 
      return false; 
     } 


     @Override 
     public void onShowPress(MotionEvent paramMotionEvent) { 
      // TODO Auto-generated method stub 
      Log.e("Pdf Act", "on show press gesture"); 
     } 


     @Override 
     public boolean onSingleTapUp(MotionEvent paramMotionEvent) { 
      // TODO Auto-generated method stub 
      Log.e("Pdf Act", "on single tap up gesture"); 
      return true; 
     } 


     @Override 
     public boolean onScroll(MotionEvent paramMotionEvent1, 
       MotionEvent paramMotionEvent2, float paramFloat1, float paramFloat2) { 
      // TODO Auto-generated method stub 
      Log.e("Pdf Act", "on scroll gesture"); 
      return false; 
     } 


     @Override 
     public void onLongPress(MotionEvent paramMotionEvent) { 
      // TODO Auto-generated method stub 
      Log.e("Pdf Act", "on long press gesture"); 
     } 


     @Override 
     public boolean onFling(MotionEvent e1, 
       MotionEvent e2, float velocityX, float velocityY) { 
      // TODO Auto-generated method stub 
      Log.e("Pdf Act", "on fling gesture"); 

      try { 
       if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH){ 
        return false; 
       } 
       // right to left swipe 
       if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE 
         && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
       // onLeftSwipe();  
        if(n>=1 && n<totalpages){ 
           pdfLayout.next(); 
           n++; 
           File file = new File(Environment.getExternalStorageDirectory()+"/PaperBoy/AndhraBhoomi/AB"+n+".pdf"); 
           if(file.exists() && file!=null){ 
            pdfLayout.setCore(file.getAbsolutePath()); 
           } 
           else{ 
            pdfLayout.setCore(Environment.getExternalStorageDirectory()+"/pdpage.pdf"); 
           } 
           page.setText(n+" of "+totalpages+" Pages"); 
          } 
       } 
       // left to right swipe 
       else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE 
         && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
        // onRightSwipe(); 
        if(n>1 && n<=totalpages){ 
           pdfLayout.pre(); 
           n--; 
           File file = new File(Environment.getExternalStorageDirectory()+"/PaperBoy/AndhraBhoomi/AB"+n+".pdf"); 
           if(file.exists() && file!=null){ 
            pdfLayout.setCore(file.getAbsolutePath()); 
           } 
           else{ 
            pdfLayout.setCore(Environment.getExternalStorageDirectory()+"/pdpage.pdf"); 
           } 
           page.setText(n+" of "+totalpages+" Pages"); 
          } 
       } 
      } catch (Exception e) { 

      } 
      return false; 
      } 


    } 

Вот мой файл разметки XML для вышеупомянутой деятельности:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/readerCont" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" 
     android:background="@drawable/tiled_background"> 

     <RelativeLayout 
      android:id="@+id/buttonsCont" 
      android:layout_width="match_parent" 
      android:layout_height="40dp" 
      android:background="@color/grey" 
      android:layout_gravity="top"> 
     <ImageButton 
      android:id="@+id/prev" 
      android:src="@drawable/left_arrow" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="#0000" 
      android:layout_alignParentLeft="true" 
      android:layout_centerVertical="true" 
      android:paddingLeft="3dp" 
      android:clickable="true"/> 
     <TextView 
      android:id="@+id/title" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerHorizontal="true" 
      android:paddingTop="3dp"/> 
     <TextView 
      android:id="@+id/pageNo" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerHorizontal="true" 
      android:layout_below="@+id/title" 
      android:paddingBottom="3dp"/> 
     <ImageButton 
      android:id="@+id/next" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="#0000" 
      android:src="@drawable/right_arrow" 
      android:layout_alignParentRight="true" 
      android:layout_centerVertical="true" 
      android:clickable="true" 
      android:paddingRight="3dp"/> 
     </RelativeLayout> 

     <com.paper.PdfLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/pdfLayout" 
      android:clickable="true" 
      android:focusable="true" 
      android:focusableInTouchMode="true"/> 

     </LinearLayout> 

ответ

0

Я понял это. Я только что создал класс GlobalState, который расширяет приложение с помощью методов get и set. Я вставляю свой код с использованием методов getter и setter для класса GlobalState в режиме просмотра onFling и отлично работает. Надеюсь, это поможет кому-то.

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

  • Нет связанных вопросов^_^