Open
Description
How can I implement smooth movement (scrolling with preview) .
`import com.davemorrissey.labs.subscaleview.ImageSource;
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView;
import java.io.File;
import java.io.IOException;
import java.util.List;
public class ImageViewerActivity extends AppCompatActivity {
private ImageView previewImageView;
private SubsamplingScaleImageView imageView;
private String mediaPath;
private List mediaPaths2;
private Uri mediaUri;
private LinearLayout photoButtonBar;
private SharedPreferences sharedPreferences;
private static final int DELETE_REQUEST_CODE = 1001;
private static final int REQUEST_CODE_OPEN_DOCUMENT = 1;
private static final int RENAME_REQUEST_CODE = 1002;
private Uri selectedUri;
private ImageView backButton;
private static final String DIALOG_STATE_KEY = "dialog_state_key";
private boolean isDialogShowing = false;
private GestureDetector gestureDetector;
private int currentIndex;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_image_viewer);
if (savedInstanceState != null) {
isDialogShowing = savedInstanceState.getBoolean(DIALOG_STATE_KEY, false);
}
sharedPreferences = getSharedPreferences(KEY.PREFS_NAME, MODE_PRIVATE);
if (sharedPreferences.getBoolean(KEY.KEY_BRIGHTNESS, false)) {
setBrightnessToMax();
}
photoButtonBar = findViewById(R.id.photo_button_bar);
imageView = findViewById(R.id.image_view);
backButton = findViewById(R.id.imageback);
backButton.setOnClickListener(v -> finish());
// Initialize GestureDetector and set onTouchListener for the imageView
gestureDetector = new GestureDetector(this, new SwipeGestureDetector());
imageView.setOnTouchListener((v, event) -> gestureDetector.onTouchEvent(event));
// Retrieve the list of media paths from the Intent
mediaPaths2 = getIntent().getStringArrayListExtra("MEDIA_PATHS");
if (mediaPaths2 == null || mediaPaths2.isEmpty()) {
Toast.makeText(this, "No media paths provided", Toast.LENGTH_SHORT).show();
finish();
return;
}
// Получаем текущий путь медиафайла
mediaPath = getIntent().getStringExtra("MEDIA_PATH");
if (mediaPath != null) {
currentIndex = mediaPaths2.indexOf(mediaPath);
if (currentIndex == -1) {
Toast.makeText(this, "Media path not found in list", Toast.LENGTH_SHORT).show();
finish();
return;
}
} else {
Toast.makeText(this, "Media path not provided", Toast.LENGTH_SHORT).show();
finish();
return;
}
// Продолжайте с загрузкой изображения
mediaUri = getMediaUri(mediaPath);
if (mediaUri != null) {
displayImage(mediaUri);
} else {
Toast.makeText(this, "Image URI not found", Toast.LENGTH_SHORT).show();
finish();
}
imageView.setOnClickListener(v -> togglePhotoButtonBarVisibility());
if (isDialogShowing) {
showPhotoInfo();
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return gestureDetector.onTouchEvent(event) || super.onTouchEvent(event);
}
private class SwipeGestureDetector extends GestureDetector.SimpleOnGestureListener {
private static final int SWIPE_THRESHOLD = 100;
private static final int SWIPE_VELOCITY_THRESHOLD = 100;
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
boolean result = false;
try {
float diffX = e2.getX() - e1.getX();
if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
if (diffX > 0) {
onSwipeRight();
} else {
onSwipeLeft();
}
result = true;
}
} catch (Exception exception) {
exception.printStackTrace();
}
return result;
}
}
private void onSwipeRight() {
if (currentIndex > 0) {
currentIndex--;
mediaUri = getMediaUri(mediaPaths2.get(currentIndex));
displayImage(mediaUri);
} else {
Toast.makeText(this, "No previous media", Toast.LENGTH_SHORT).show();
}
}
private void onSwipeLeft() {
if (currentIndex < mediaPaths2.size() - 1) {
currentIndex++;
mediaUri = getMediaUri(mediaPaths2.get(currentIndex));
displayImage(mediaUri);
} else {
Toast.makeText(this, "No next media", Toast.LENGTH_SHORT).show();
}
}
private void displayImage(Uri uri) {
imageView.setImage(ImageSource.uri(uri));
}`
`
<com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
android:id="@+id/image_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<include
android:id="@+id/photo_button_bar"
layout="@layout/photo_view_button_bar"
android:visibility="gone" />
Metadata
Metadata
Assignees
Labels
No labels