0
votes

Actually I created a pdf viewer and i jus want to create a longclicklistener to open my new activity and as u can see here Screenshot And there is already a click listener assigned with this button and i also want to combine longclicklistener so when i long click that button then automatically launch my second activity

public void actionButtonClick(View view) {
        if (pageCount == 0) {
            Toast.makeText(getApplicationContext(), getString(R.string.no_selected_pdf), Toast.LENGTH_LONG).show();
            return;
        }
        final BottomSheetDialog dialog = new BottomSheetDialog(MainActivity.this);
        dialog.setContentView(R.layout.bottom_sheet);
        dialog.setCanceledOnTouchOutside(true);
        NumberPicker numberPicker = (NumberPicker) dialog.findViewById(R.id.number_picker);
        if (numberPicker != null) {
            numberPicker.setMaxValue(pageCount);
            numberPicker.setValue(pdfView.getCurrentPage() + 1);
            numberPicker.setOnValueChangedListener((picker, oldVal, newVal) -> {
                pdfView.jumpTo(newVal - 1, true);
            });
        }
        dialog.show();
    }


    public void openButtonClick(View view) {
        launchPicker();
    }

    private void startAnimation(int state) {
        actionLayout.animate()
                .translationY(state == 0 ? actionLayout.getHeight() : 0)
                .alpha(state == 0 ? 0 : 1.0f)
                .setDuration(300).setListener(new AnimatorListenerAdapter() {
                    @Override
                    public void onAnimationEnd(Animator animation) {
                        menu.findItem(R.id.hide_or_show_button).setChecked(state != 1);
                        super.onAnimationEnd(animation);
                    }
                });
    }

    private void hideOrShowActionButton() {
        if (actionLayout.getAlpha() == 1.0)
            startAnimation(0);
        else
            startAnimation(1);
    }

    private void showSnackBar(@NonNull String msg, boolean isError) {
        Snackbar snackbar = Snackbar
                .make(findViewById(R.id.main_layout), msg, Snackbar.LENGTH_SHORT);
        snackbar.setBackgroundTint(ContextCompat
                .getColor(Objects.requireNonNull(getApplicationContext()),
                        isError ? R.color.err_color : R.color.main_color));
        snackbar.setTextColor(ContextCompat
                .getColor(Objects.requireNonNull(getApplicationContext()), R.color.white));
        snackbar.show();
    }

    @Override
    public void loadComplete(int nbPages) {
        pageCount = nbPages;
        warningLayout.setVisibility(View.GONE);
        PdfDocument.Meta meta = pdfView.getDocumentMeta();
        detailsMap.clear();
        detailsMap.add(meta.getTitle());
        detailsMap.add(meta.getAuthor());
        detailsMap.add(meta.getSubject());
        detailsMap.add(meta.getKeywords());
        detailsMap.add(meta.getCreator());
        detailsMap.add(meta.getProducer());
        detailsMap.add(dateFormatter(meta.getCreationDate()));
        detailsMap.add(dateFormatter(meta.getModDate()));
    }

    private String dateFormatter(String data) {
        if (!data.isEmpty()) {
            String date = data.substring(2);
            String y = date.substring(0, 4);
            String m = date.substring(4, 6);
            String d = date.substring(6, 8);
            return y + "/" + m + "/" + d;
        } else {
            return data;
        }
    }

    @Override
    public void onPageChanged(int page, int pageCount) {
        pageNumber.setText(String.valueOf(page + 1));
    }

    @Override
    public void onPageError(int page, Throwable t) {
        showSnackBar(getString(R.string.page_not_loaded) + page, true);
    }
}

Xml File This Is Xml File if needed

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/bg_color"
    tools:context=".MainActivity">

    <com.github.barteksc.pdfviewer.PDFView
        android:id="@+id/pdf_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/bg_color"
        app:layout_anchor="@+id/warning"
        app:layout_anchorGravity="center">

        <Button
            android:id="@+id/button"
            android:layout_width="42dp"
            android:layout_height="11dp"
            android:layout_below="@id/textView"
            android:layout_alignParentBottom="true"
            android:layout_marginBottom="518dp"
            android:text="open activity 2" />
    </com.github.barteksc.pdfviewer.PDFView>

    <LinearLayout
        android:id="@+id/warning"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal|center_vertical"
        android:orientation="vertical">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:text="@string/no_selected_pdf"
            android:textColor="@color/secondary_text_color"
            android:textSize="16sp" />

        <TextView
            android:id="@+id/tv_open_pdf"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:clickable="true"
            android:focusable="true"
            android:onClick="openButtonClick"
            android:padding="10dp"
            android:text="@string/click_to_select_pdf"
            android:textColor="@color/main_color"
            android:textSize="18sp" />

    </LinearLayout>


    <FrameLayout
        android:id="@+id/action_layout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end">

        <com.google.android.material.floatingactionbutton.FloatingActionButton
            android:id="@+id/action_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom|end"
            android:layout_margin="20dp"
            android:contentDescription="@string/action_btn_description"
            android:onClick="actionButtonClick"
            app:backgroundTint="@color/main_color"
            app:borderWidth="0dp"
            app:tint="@color/white" />

        <TextView
            android:id="@+id/tv_page_number"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:elevation="16dp"
            android:text="x"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:textColor="@android:color/white"
            android:textSize="16sp" />

    </FrameLayout>


</androidx.coordinatorlayout.widget.CoordinatorLayout>
1

1 Answers

0
votes

I suggest that you use an onTouchListener instead.

By using an onTouchListener, you could adjust the difference between a click and a long click.

long start;
myButton.setOnTouchListener(new View.OnTouchListener(){
  @Override
  public boolean onTouch(final View v, final MotionEvent event){
    switch(event.getAction()){
      case MotionEvent.ACTION_DOWN:
        start=System.currentTimeMillis();
        return true;
      case MotionEvent.ACTION_UP:
        if(System.currentTimeMillis()-start<500){ //Click is less than 500ms, you can adjust this value later...
          //Do what you want on click over here...
        }else{
          //It's a long click, do what you want over here...
        }
        return true;
      default:
        return false;
    }
});