layout fix, image preview improvement, added mediacontroller theme
This commit is contained in:
parent
17c5d2c8a4
commit
6104c730bd
|
@ -8,7 +8,6 @@ import android.media.MediaPlayer.OnInfoListener;
|
|||
import android.media.MediaPlayer.OnPreparedListener;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.widget.MediaController;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.Toast;
|
||||
|
@ -79,9 +78,10 @@ public class MediaViewer extends MediaActivity implements OnImageClickListener,
|
|||
public static final int MEDIAVIEWER_ANGIF = 4;
|
||||
|
||||
private ImageLoader imageAsync;
|
||||
private GlobalSettings settings;
|
||||
|
||||
private ProgressBar media_progress;
|
||||
private MediaController videoController;
|
||||
private MediaController controlPanel;
|
||||
private ImageAdapter adapter;
|
||||
private VideoView videoView;
|
||||
private ZoomView zoomImage;
|
||||
|
@ -99,12 +99,12 @@ public class MediaViewer extends MediaActivity implements OnImageClickListener,
|
|||
media_progress = findViewById(R.id.media_progress);
|
||||
zoomImage = findViewById(R.id.image_full);
|
||||
videoView = findViewById(R.id.video_view);
|
||||
videoController = new MediaController(this);
|
||||
controlPanel = new MediaController(this);
|
||||
videoView.setZOrderOnTop(true);
|
||||
videoView.setOnPreparedListener(this);
|
||||
videoView.setOnErrorListener(this);
|
||||
|
||||
GlobalSettings settings = GlobalSettings.getInstance(this);
|
||||
settings = GlobalSettings.getInstance(this);
|
||||
adapter = new ImageAdapter(settings, this);
|
||||
AppStyles.setProgressColor(media_progress, settings.getHighlightColor());
|
||||
|
||||
|
@ -115,7 +115,8 @@ public class MediaViewer extends MediaActivity implements OnImageClickListener,
|
|||
case MEDIAVIEWER_IMG_S:
|
||||
adapter.disableSaveButton();
|
||||
case MEDIAVIEWER_IMAGE:
|
||||
videoView.setVisibility(GONE);
|
||||
zoomImage.setVisibility(VISIBLE);
|
||||
imageList.setVisibility(VISIBLE);
|
||||
imageList.setLayoutManager(new LinearLayoutManager(this, HORIZONTAL, false));
|
||||
imageList.setAdapter(adapter);
|
||||
if (imageAsync == null) {
|
||||
|
@ -125,9 +126,8 @@ public class MediaViewer extends MediaActivity implements OnImageClickListener,
|
|||
break;
|
||||
|
||||
case MEDIAVIEWER_VIDEO:
|
||||
zoomImage.setVisibility(GONE);
|
||||
imageList.setVisibility(GONE);
|
||||
videoView.setMediaController(videoController);
|
||||
videoView.setVisibility(VISIBLE);
|
||||
videoView.setMediaController(controlPanel);
|
||||
case MEDIAVIEWER_ANGIF:
|
||||
zoomImage.setVisibility(GONE);
|
||||
Uri video = Uri.parse(mediaLinks[0]);
|
||||
|
@ -185,7 +185,8 @@ public class MediaViewer extends MediaActivity implements OnImageClickListener,
|
|||
if (type == MEDIAVIEWER_ANGIF) {
|
||||
mp.setLooping(true);
|
||||
} else {
|
||||
videoController.show(0);
|
||||
controlPanel.show(Integer.MAX_VALUE);
|
||||
AppStyles.setTheme(settings, controlPanel);
|
||||
if (videoPos > 0) {
|
||||
mp.seekTo(videoPos);
|
||||
}
|
||||
|
@ -246,8 +247,8 @@ public class MediaViewer extends MediaActivity implements OnImageClickListener,
|
|||
public void setImage(ImageHolder image) {
|
||||
if (adapter.isEmpty()) {
|
||||
zoomImage.reset();
|
||||
zoomImage.setImageBitmap(image.getMiddleSize());
|
||||
media_progress.setVisibility(View.INVISIBLE);
|
||||
zoomImage.setImageBitmap(image.reducedImage);
|
||||
media_progress.setVisibility(INVISIBLE);
|
||||
}
|
||||
adapter.addLast(image);
|
||||
}
|
||||
|
|
|
@ -125,7 +125,7 @@ public class ImageAdapter extends Adapter<ViewHolder> {
|
|||
public void onClick(View v) {
|
||||
int pos = item.getAdapterPosition();
|
||||
if (pos != NO_POSITION) {
|
||||
Bitmap img = images.get(pos).getMiddleSize();
|
||||
Bitmap img = images.get(pos).reducedImage;
|
||||
itemClickListener.onImageClick(img);
|
||||
}
|
||||
}
|
||||
|
@ -137,7 +137,7 @@ public class ImageAdapter extends Adapter<ViewHolder> {
|
|||
public void onClick(View v) {
|
||||
int pos = item.getAdapterPosition();
|
||||
if (pos != NO_POSITION) {
|
||||
Bitmap img = images.get(pos).getOriginalImage();
|
||||
Bitmap img = images.get(pos).fullImage;
|
||||
itemClickListener.onImageSave(img, pos);
|
||||
}
|
||||
}
|
||||
|
@ -155,7 +155,7 @@ public class ImageAdapter extends Adapter<ViewHolder> {
|
|||
public void onBindViewHolder(@NonNull ViewHolder vh, int index) {
|
||||
if (vh instanceof ImageItem) {
|
||||
ImageItem item = (ImageItem) vh;
|
||||
Bitmap image = images.get(index).getSmallSize();
|
||||
Bitmap image = images.get(index).preview;
|
||||
item.preview.setImageBitmap(image);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,7 +2,6 @@ package org.nuclearfog.twidda.backend;
|
|||
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.graphics.Point;
|
||||
import android.os.AsyncTask;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
@ -23,13 +22,10 @@ import java.lang.ref.WeakReference;
|
|||
*/
|
||||
public class ImageLoader extends AsyncTask<String, ImageHolder, Boolean> {
|
||||
|
||||
private static final float PREV_HEIGHT_RATIO = 5.0f;
|
||||
|
||||
@Nullable
|
||||
private EngineException err;
|
||||
private TwitterEngine mTwitter;
|
||||
private WeakReference<MediaViewer> callback;
|
||||
private float previewHeight, zoomPreview;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -41,10 +37,6 @@ public class ImageLoader extends AsyncTask<String, ImageHolder, Boolean> {
|
|||
super();
|
||||
this.callback = new WeakReference<>(callback);
|
||||
mTwitter = TwitterEngine.getInstance(callback);
|
||||
Point displaySize = new Point();
|
||||
callback.getWindowManager().getDefaultDisplay().getSize(displaySize);
|
||||
zoomPreview = displaySize.x;
|
||||
previewHeight = displaySize.y / PREV_HEIGHT_RATIO;
|
||||
}
|
||||
|
||||
|
||||
|
@ -59,7 +51,7 @@ public class ImageLoader extends AsyncTask<String, ImageHolder, Boolean> {
|
|||
image = BitmapFactory.decodeFile(link);
|
||||
}
|
||||
if (image != null) {
|
||||
ImageHolder images = new ImageHolder(image, previewHeight, zoomPreview);
|
||||
ImageHolder images = new ImageHolder(image);
|
||||
publishProgress(images);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,53 +11,53 @@ import androidx.annotation.NonNull;
|
|||
*/
|
||||
public class ImageHolder {
|
||||
|
||||
private Bitmap smallImage, middleImage, fullImage;
|
||||
/**
|
||||
* maximum height of the smallest preview in pixels
|
||||
*/
|
||||
private static final float previewHeight = 320.0f;
|
||||
|
||||
/**
|
||||
* @param fullImage Full size image
|
||||
* @param smallImageHeight height of the smallest image preview
|
||||
* @param middleImageWidth width of the image preview
|
||||
* maximum height of the image preview in pixels
|
||||
*/
|
||||
public ImageHolder(@NonNull Bitmap fullImage, float smallImageHeight, float middleImageWidth) {
|
||||
private static final float reducedHeight = 1200.0f;
|
||||
|
||||
/**
|
||||
* preview image bitmap
|
||||
*/
|
||||
public final Bitmap preview;
|
||||
|
||||
/**
|
||||
* downscaled image bitmap
|
||||
*/
|
||||
public final Bitmap reducedImage;
|
||||
|
||||
/**
|
||||
* full image bitmap
|
||||
*/
|
||||
public final Bitmap fullImage;
|
||||
|
||||
/**
|
||||
* @param fullImage Full size image
|
||||
*/
|
||||
public ImageHolder(@NonNull Bitmap fullImage) {
|
||||
this.fullImage = fullImage;
|
||||
|
||||
float ratio = fullImage.getHeight() / smallImageHeight;
|
||||
int destWidth = (int) (fullImage.getWidth() / ratio);
|
||||
smallImage = Bitmap.createScaledBitmap(fullImage, destWidth, (int) smallImageHeight, false);
|
||||
float reducedRatio = fullImage.getHeight() / reducedHeight;
|
||||
float previewRatio = fullImage.getHeight() / previewHeight;
|
||||
|
||||
if (middleImageWidth > 0 && fullImage.getWidth() > middleImageWidth) {
|
||||
ratio = fullImage.getWidth() / middleImageWidth;
|
||||
int destHeight = (int) (fullImage.getHeight() / ratio);
|
||||
middleImage = Bitmap.createScaledBitmap(fullImage, (int) middleImageWidth, destHeight, false);
|
||||
if (reducedRatio > 1.0f) {
|
||||
int height = (int) reducedHeight;
|
||||
int width = (int) (fullImage.getWidth() / reducedRatio);
|
||||
reducedImage = Bitmap.createScaledBitmap(fullImage, width, height, false);
|
||||
} else {
|
||||
middleImage = fullImage;
|
||||
reducedImage = fullImage;
|
||||
}
|
||||
if (previewRatio > 1.0f) {
|
||||
int height = (int) previewHeight;
|
||||
int width = (int) (fullImage.getWidth() / previewRatio);
|
||||
preview = Bitmap.createScaledBitmap(fullImage, width, height, false);
|
||||
} else {
|
||||
preview = fullImage;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* get small sized image
|
||||
*
|
||||
* @return Image Bitmap
|
||||
*/
|
||||
public Bitmap getSmallSize() {
|
||||
return smallImage;
|
||||
}
|
||||
|
||||
/**
|
||||
* get Middle sized image
|
||||
*
|
||||
* @return Image Bitmap
|
||||
*/
|
||||
public Bitmap getMiddleSize() {
|
||||
return middleImage;
|
||||
}
|
||||
|
||||
/**
|
||||
* get Original Image
|
||||
*
|
||||
* @return Image Bitmap
|
||||
*/
|
||||
public Bitmap getOriginalImage() {
|
||||
return fullImage;
|
||||
}
|
||||
}
|
|
@ -1,35 +1,53 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<VideoView
|
||||
android:id="@+id/video_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="center" />
|
||||
|
||||
<org.nuclearfog.zoomview.ZoomView
|
||||
android:id="@+id/image_full"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:visibility="invisible"
|
||||
app:enable_move="true"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:max_zoom_in="10.0"
|
||||
app:max_zoom_out="0.8" />
|
||||
|
||||
<ProgressBar
|
||||
android:id="@+id/media_progress"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center" />
|
||||
app:max_zoom_out="0.7" />
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/image_list"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="bottom"
|
||||
android:layout_height="0dp"
|
||||
android:layout_marginStart="@dimen/mediapage_preview_margin"
|
||||
android:layout_marginLeft="@dimen/mediapage_preview_margin"
|
||||
android:layout_marginBottom="@dimen/mediapage_preview_margin"
|
||||
android:scrollbars="horizontal"
|
||||
android:layout_margin="@dimen/mediapage_preview_margin" />
|
||||
android:visibility="invisible"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintHeight_percent="0.2"
|
||||
app:layout_constraintStart_toStartOf="parent" />
|
||||
|
||||
</FrameLayout>
|
||||
<VideoView
|
||||
android:id="@+id/video_view"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="invisible"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<ProgressBar
|
||||
android:id="@+id/media_progress"
|
||||
android:layout_width="@dimen/mediapage_circle_size"
|
||||
android:layout_height="@dimen/mediapage_circle_size"
|
||||
android:layout_marginTop="@dimen/mediapage_preview_margin"
|
||||
app:layout_constraintBottom_toTopOf="@+id/image_list"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -57,7 +57,6 @@
|
|||
<dimen name="editprofile_layout_padding">20dp</dimen>
|
||||
<dimen name="editprofile_button_padding">5dp</dimen>
|
||||
<dimen name="editprofile_button_height">20sp</dimen>
|
||||
<dimen name="editprofile_button_width">120sp</dimen>
|
||||
<dimen name="editprofile_edittext_padding">5dp</dimen>
|
||||
<dimen name="editprofile_bio_min_height">150dp</dimen>
|
||||
<dimen name="editprofile_image">@dimen/profile_image_size</dimen>
|
||||
|
@ -148,6 +147,7 @@
|
|||
|
||||
<!--dimens of page_media.xml-->
|
||||
<dimen name="mediapage_preview_margin">10dp</dimen>
|
||||
<dimen name="mediapage_circle_size">64dp</dimen>
|
||||
|
||||
<!--dimens of item_placeholder.xml-->
|
||||
<dimen name="placeholderitem_margin">8dp</dimen>
|
||||
|
|
Loading…
Reference in New Issue