From cd3a8b5d434299165e7d2693a0def499968c9cae Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Fri, 21 Jul 2017 17:53:51 +0200 Subject: [PATCH] Add new shop banners --- Habitica/res/layout/row_shopitem.xml | 1 + Habitica/res/layout/shop_header.xml | 11 +++- Habitica/res/values/dimens.xml | 1 + .../helpers/TiledBitmapPostProcessor.java | 30 +++++++++ .../inventory/ShopRecyclerAdapter.java | 62 ++++++++++++++++++- 5 files changed, 99 insertions(+), 6 deletions(-) create mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TiledBitmapPostProcessor.java diff --git a/Habitica/res/layout/row_shopitem.xml b/Habitica/res/layout/row_shopitem.xml index f9180d6ca..b7a42cdbd 100644 --- a/Habitica/res/layout/row_shopitem.xml +++ b/Habitica/res/layout/row_shopitem.xml @@ -3,6 +3,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" + xmlns:fresco="http://schemas.android.com/apk/res-auto" android:clickable="true" android:background="@color/white"> - + android:layout_height="@dimen/shop_height"/> + 84dp 24dp 68dp + 186dp diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TiledBitmapPostProcessor.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TiledBitmapPostProcessor.java new file mode 100644 index 000000000..741736b9b --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TiledBitmapPostProcessor.java @@ -0,0 +1,30 @@ +package com.habitrpg.android.habitica.helpers; + +import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.Shader; +import android.graphics.drawable.BitmapDrawable; + +import com.facebook.imagepipeline.request.BasePostprocessor; + +/** + * Created by phillip on 21.07.17. + */ + +public class TiledBitmapPostProcessor extends BasePostprocessor { + + private final Resources resources; + + public TiledBitmapPostProcessor(Resources resources) { + super(); + this.resources = resources; + } + + @Override + public void process(Bitmap bitmap) { + BitmapDrawable TileMe = new BitmapDrawable(resources, bitmap); + TileMe.setTileModeX(Shader.TileMode.REPEAT); + TileMe.setTileModeY(Shader.TileMode.REPEAT); + super.process(TileMe.getBitmap()); + } +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ShopRecyclerAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ShopRecyclerAdapter.java index a0150d1f2..4ff7a1e33 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ShopRecyclerAdapter.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ShopRecyclerAdapter.java @@ -1,11 +1,17 @@ package com.habitrpg.android.habitica.ui.adapter.inventory; import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Shader; +import android.graphics.drawable.BitmapDrawable; +import android.net.Uri; +import android.support.annotation.Nullable; import android.support.v4.content.ContextCompat; import android.support.v7.app.AlertDialog; import android.support.v7.widget.RecyclerView; import android.text.Html; import android.text.method.LinkMovementMethod; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -13,9 +19,20 @@ import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; +import com.facebook.common.executors.CallerThreadExecutor; +import com.facebook.common.references.CloseableReference; +import com.facebook.datasource.DataSource; +import com.facebook.drawee.backends.pipeline.Fresco; +import com.facebook.drawee.interfaces.DraweeController; import com.facebook.drawee.view.SimpleDraweeView; +import com.facebook.imagepipeline.core.ImagePipeline; +import com.facebook.imagepipeline.datasource.BaseBitmapDataSubscriber; +import com.facebook.imagepipeline.image.CloseableImage; +import com.facebook.imagepipeline.request.ImageRequest; +import com.facebook.imagepipeline.request.ImageRequestBuilder; import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.events.commands.BuyGemItemCommand; +import com.habitrpg.android.habitica.helpers.TiledBitmapPostProcessor; import com.habitrpg.android.habitica.models.shops.Shop; import com.habitrpg.android.habitica.models.shops.ShopCategory; import com.habitrpg.android.habitica.models.shops.ShopItem; @@ -213,8 +230,11 @@ public class ShopRecyclerAdapter extends RecyclerView.Adapter> + dataSource = imagePipeline.fetchDecodedImage(imageRequest, this); + + dataSource.subscribe(new BaseBitmapDataSubscriber() { + + @Override + public void onNewResultImpl(@Nullable Bitmap bitmap) { + if (dataSource.isFinished() && bitmap != null){ + float aspectRatio = bitmap.getWidth() / + (float) bitmap.getHeight(); + int height = (int) context.getResources().getDimension(R.dimen.shop_height); + int width = Math.round(height * aspectRatio); + BitmapDrawable drawable = new BitmapDrawable(context.getResources(), Bitmap.createScaledBitmap(bitmap, width, height, false)); + drawable.setTileModeX(Shader.TileMode.REPEAT); + backgroundView.setBackground(drawable); + dataSource.close(); + } + } + + @Override + public void onFailureImpl(DataSource dataSource) { + if (dataSource != null) { + dataSource.close(); + } + } + }, CallerThreadExecutor.getInstance()); + descriptionView.setText(Html.fromHtml(shop.getNotes())); switch (shop.getIdentifier()) { case "market":