Merge branch 'screenshots-layout' into 'master'

Improve screenshots layout

See merge request !569
This commit is contained in:
Peter Serwylo 2017-08-28 23:05:09 +00:00
commit d65d64f6f8
5 changed files with 26 additions and 58 deletions

View File

@ -582,7 +582,6 @@ public class AppDetailsRecyclerViewAdapter
snapHelper.attachToRecyclerView(null); snapHelper.attachToRecyclerView(null);
} }
snapHelper = new LinearLayoutManagerSnapHelper(lm); snapHelper = new LinearLayoutManagerSnapHelper(lm);
snapHelper.setLinearSnapHelperListener(adapter);
snapHelper.attachToRecyclerView(recyclerView); snapHelper.attachToRecyclerView(recyclerView);
} }
} }

View File

@ -1,9 +1,7 @@
package org.fdroid.fdroid.views; package org.fdroid.fdroid.views;
import android.content.Context; import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.support.v4.view.ViewCompat;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@ -17,22 +15,13 @@ import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import org.fdroid.fdroid.R; import org.fdroid.fdroid.R;
import org.fdroid.fdroid.data.App; import org.fdroid.fdroid.data.App;
public class ScreenShotsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> class ScreenShotsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
implements LinearLayoutManagerSnapHelper.LinearSnapHelperListener {
private final String[] screenshots; private final String[] screenshots;
private final DisplayImageOptions displayImageOptions; private final DisplayImageOptions displayImageOptions;
private View selectedView;
private int selectedPosition;
private final int selectedItemElevation;
private final int unselectedItemMargin;
public ScreenShotsRecyclerViewAdapter(Context context, App app) { ScreenShotsRecyclerViewAdapter(Context context, App app) {
super(); super();
screenshots = app.getAllScreenshots(context); screenshots = app.getAllScreenshots(context);
selectedPosition = 0;
Resources r = context.getResources();
selectedItemElevation = r.getDimensionPixelSize(R.dimen.details_screenshot_selected_elevation);
unselectedItemMargin = r.getDimensionPixelSize(R.dimen.details_screenshot_margin);
displayImageOptions = new DisplayImageOptions.Builder() displayImageOptions = new DisplayImageOptions.Builder()
.cacheInMemory(true) .cacheInMemory(true)
.cacheOnDisk(true) .cacheOnDisk(true)
@ -46,10 +35,6 @@ public class ScreenShotsRecyclerViewAdapter extends RecyclerView.Adapter<Recycle
@Override @Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
ScreenShotViewHolder vh = (ScreenShotViewHolder) holder; ScreenShotViewHolder vh = (ScreenShotViewHolder) holder;
setViewSelected(vh.itemView, position == selectedPosition);
if (position == selectedPosition) {
this.selectedView = vh.itemView;
}
ImageLoader.getInstance().displayImage(screenshots[position], ImageLoader.getInstance().displayImage(screenshots[position],
vh.image, displayImageOptions); vh.image, displayImageOptions);
} }
@ -66,30 +51,6 @@ public class ScreenShotsRecyclerViewAdapter extends RecyclerView.Adapter<Recycle
return screenshots.length; return screenshots.length;
} }
@Override
public void onSnappedToView(View view, int snappedPosition) {
// Deselect the previous selected view first
setViewSelected(selectedView, false);
// Change the selected view to the newly snapped-to view.
selectedView = view;
selectedPosition = snappedPosition;
setViewSelected(selectedView, true);
}
private void setViewSelected(View view, boolean selected) {
if (view != null) {
RecyclerView.LayoutParams lp = (RecyclerView.LayoutParams) view.getLayoutParams();
if (selected) {
lp.setMargins(0, selectedItemElevation, 0, selectedItemElevation);
} else {
lp.setMargins(0, unselectedItemMargin, 0, unselectedItemMargin);
}
ViewCompat.setElevation(view, selected ? selectedItemElevation : selectedItemElevation / 2);
view.setLayoutParams(lp);
}
}
private class ScreenShotViewHolder extends RecyclerView.ViewHolder { private class ScreenShotViewHolder extends RecyclerView.ViewHolder {
final ImageView image; final ImageView image;

View File

@ -1,18 +1,19 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_margin="@dimen/details_screenshot_margin"
app:cardElevation="3dp"
app:cardBackgroundColor="#ffffff"
android:padding="10dp" android:padding="10dp"
> app:cardBackgroundColor="#ffffff"
app:cardElevation="3dp">
<ImageView <ImageView
android:id="@+id/image" android:id="@+id/image"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="match_parent"
android:adjustViewBounds="true" android:adjustViewBounds="true"
android:minWidth="@dimen/details_screenshot_width" android:minWidth="@dimen/details_screenshot_width"
android:scaleType="fitCenter" android:scaleType="fitCenter" />
/>
</android.support.v7.widget.CardView> </android.support.v7.widget.CardView>

View File

@ -1,7 +1,17 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.RecyclerView <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/screenshots" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/details_screenshot_height"> android:layout_height="@dimen/details_screenshot_height">
</android.support.v7.widget.RecyclerView>
<android.support.v7.widget.RecyclerView
android:id="@+id/screenshots"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center"
android:orientation="horizontal"
app:layoutManager="LinearLayoutManager"
tools:listitem="@layout/app_details2_screenshot_item" />
</FrameLayout>

View File

@ -11,12 +11,9 @@
applied. The collapsable lists have a little extra on the sides. --> applied. The collapsable lists have a little extra on the sides. -->
<dimen name="details_activity__collapsable_lists__padding__horizontal">4dp</dimen> <dimen name="details_activity__collapsable_lists__padding__horizontal">4dp</dimen>
<dimen name="details_screenshot_height">200dp</dimen> <dimen name="details_screenshot_height">240dp</dimen>
<dimen name="details_screenshot_width">200dp</dimen> <dimen name="details_screenshot_width">240dp</dimen>
<!-- "Not selected" items are inset by this value, while the selected one is not --> <dimen name="details_screenshot_margin">4dp</dimen>
<dimen name="details_screenshot_margin">8dp</dimen>
<!-- The selected item stands out from the background by this elevation -->
<dimen name="details_screenshot_selected_elevation">3dp</dimen>
<dimen name="fab_margin">16dp</dimen> <dimen name="fab_margin">16dp</dimen>