У меня есть активность, которая реализует 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>