Adding image displaying control with glide

This commit is contained in:
Shinokuni 2019-01-31 19:32:56 +00:00
parent 6656724a53
commit bab22e99ee
3 changed files with 69 additions and 15 deletions

View File

@ -36,6 +36,10 @@ dependencies {
implementation 'com.github.bumptech.glide:glide:4.8.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'
implementation ("com.github.bumptech.glide:recyclerview-integration:4.8.0") {
// Excludes the support library because it's already included by Glide.
transitive = false
}
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
@ -49,4 +53,7 @@ dependencies {
implementation "joda-time:joda-time:2.9.9"
implementation 'com.android.support:cardview-v7:28.0.0'
}

View File

@ -4,13 +4,11 @@ import android.app.Dialog;
import android.arch.lifecycle.ViewModelProvider;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.NavigationView;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
@ -20,11 +18,11 @@ import android.support.v7.widget.helper.ItemTouchHelper;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.bumptech.glide.Glide;
import com.bumptech.glide.RequestManager;
import com.bumptech.glide.integration.recyclerview.RecyclerViewPreloader;
import com.bumptech.glide.util.ViewPreloadSizeProvider;
import com.readrops.app.database.entities.Item;
import com.readrops.readropslibrary.ParsingResult;
@ -46,7 +44,7 @@ public class MainActivity extends AppCompatActivity implements SimpleCallback, S
private NavigationView navigationView;
private DrawerLayout drawerLayout;
private List<Item> itemList;
private List<Item> newItems;
private TreeMap<LocalDateTime, Item> itemsMap;
@ -84,14 +82,16 @@ public class MainActivity extends AppCompatActivity implements SimpleCallback, S
viewModel.setSimpleCallback(this);
itemsMap = new TreeMap<>(LocalDateTime::compareTo);
itemList = new ArrayList<>();
newItems = new ArrayList<>();
viewModel.getItems().observe(this, (List<Item> items) -> {
for (Item item : items) {
/*for (Item item : items) {
itemsMap.put(item.getFormatedDate(), item);
}
}*/
adapter.submitList(items);
newItems = items;
if (!refreshLayout.isRefreshing())
adapter.submitList(newItems);
});
refreshLayout = findViewById(R.id.swipe_refresh_layout);
@ -122,7 +122,12 @@ public class MainActivity extends AppCompatActivity implements SimpleCallback, S
private void initRecyclerView() {
recyclerView = findViewById(R.id.items_recycler_view);
adapter = new MainItemListAdapter(Glide.with(this));
ViewPreloadSizeProvider preloadSizeProvider = new ViewPreloadSizeProvider();
adapter = new MainItemListAdapter(Glide.with(this), preloadSizeProvider);
RecyclerViewPreloader<String> preloader = new RecyclerViewPreloader<String>(Glide.with(this), adapter, preloadSizeProvider, 10);
recyclerView.addOnScrollListener(preloader);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
@ -158,6 +163,10 @@ public class MainActivity extends AppCompatActivity implements SimpleCallback, S
return true;
}
}).attachToRecyclerView(recyclerView);
}
private void updateList() {
@ -167,6 +176,8 @@ public class MainActivity extends AppCompatActivity implements SimpleCallback, S
@Override
public void onSuccess() {
refreshLayout.setRefreshing(false);
adapter.submitList(newItems);
//newItems.clear();
}
@Override

View File

@ -1,29 +1,44 @@
package com.readrops.app;
import android.graphics.drawable.Drawable;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.recyclerview.extensions.ListAdapter;
import android.support.v7.util.DiffUtil;
import android.support.v7.widget.RecyclerView;
import android.util.Patterns;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.ListPreloader;
import com.bumptech.glide.RequestBuilder;
import com.bumptech.glide.RequestManager;
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions;
import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.transition.DrawableCrossFadeFactory;
import com.bumptech.glide.util.ViewPreloadSizeProvider;
import com.readrops.app.database.entities.Item;
public class MainItemListAdapter extends ListAdapter<Item, MainItemListAdapter.ViewHolder> {
import java.util.Collection;
import java.util.Collections;
import java.util.List;
public class MainItemListAdapter extends ListAdapter<Item, MainItemListAdapter.ViewHolder> implements ListPreloader.PreloadModelProvider<String> {
private RequestManager manager;
private OnItemClickListener listener;
private ViewPreloadSizeProvider preloadSizeProvider;
public MainItemListAdapter(RequestManager manager) {
public MainItemListAdapter(RequestManager manager, ViewPreloadSizeProvider preloadSizeProvider) {
super(DIFF_CALLBACK);
this.manager = manager;
this.preloadSizeProvider = preloadSizeProvider;
}
private static final DiffUtil.ItemCallback<Item> DIFF_CALLBACK = new DiffUtil.ItemCallback<Item>() {
@ -39,6 +54,8 @@ public class MainItemListAdapter extends ListAdapter<Item, MainItemListAdapter.V
}
};
private static final DrawableCrossFadeFactory fadeFactory = new DrawableCrossFadeFactory.Builder().setCrossFadeEnabled(true).build();
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
@ -53,20 +70,39 @@ public class MainItemListAdapter extends ListAdapter<Item, MainItemListAdapter.V
Item item = getItem(i);
viewHolder.bind(item);
preloadSizeProvider.setView(viewHolder.itemImage);
// displaying image with some round corners
RequestOptions requestOptions = new RequestOptions();
requestOptions = requestOptions.transforms(new CenterCrop(), new RoundedCorners(16));
if (item.getImageLink() != null)
manager.load(item.getImageLink()).apply(requestOptions).into(viewHolder.itemImage);
manager.load(item.getImageLink())
.apply(requestOptions)
.transition(DrawableTransitionOptions.withCrossFade(fadeFactory))
.into(viewHolder.itemImage);
}
@NonNull
@Override
public List<String> getPreloadItems(int position) {
String url = getItem(position).getImageLink();
return Collections.singletonList(url);
}
@Nullable
@Override
public RequestBuilder<Drawable> getPreloadRequestBuilder(@NonNull String url) {
return manager.load(url);
}
public interface OnItemClickListener {
void onItemClick(Item item);
}
public void setOnItemClickListener() {
public void setOnItemClickListener(OnItemClickListener listener) {
this.listener = listener;
}
class ViewHolder extends RecyclerView.ViewHolder {