2016-01-12 2 views
0

Я пытаюсь использовать Glide для отображения изображений в Recyclerview, но они размыты (изображения находятся в формате jpg).Изображения с использованием Glide размыты

Я попытался использовать Picasso для их отображения, но я получаю точно такую ​​же проблему: изображения размыты. В качестве теста у меня также есть 10 рисунков, и они кажутся очень хорошими. Кто-нибудь знает, почему изображения размыты?

** EDIT **

Я просто побежал мой код на (Genymotion эмуляторе) Google Galaxy Nexus 4.2.2; API 17 и изображения в порядке! Итак, следующая проблема заключается в том, почему изображения были размыты на (эмулятор Genymotion) Motorola Moto X 4.3; API 18.

** EDIT **

Я думаю, что я узнал, почему мои изображения были размытыми: В моем основном фрагменте я написал URL моих изображений в мою базу данных с помощью пользовательского контента моего провайдера. Мои начальные изображения были более низкого разрешения, поэтому, когда я их отображал, и из-за изменения размера и форматирования они стали размытыми. Поэтому я использовал изображение более высокого разрешения в надежде, что это решит проблему. Сначала это не было (разочарование !!), пока я не изменил номер версии базы данных. Новые изображения были затем записаны в базу данных, и проблема была правильной.

package demo.example.com.customarrayadapter; 

import android.content.Context; 
import android.database.Cursor; 
import android.support.v7.widget.RecyclerView; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 
import android.widget.TextView; 

import com.bumptech.glide.Glide; 

import java.util.List; 

import demo.example.com.customarrayadapter.data.FlavorsContract; 

/** 
* Created by richard on 03/01/16. 
*/ 
public class AndroidFlavorCursorRecyclerViewAdapter extends 
     CursorRecyclerAdapter<AndroidFlavorCursorRecyclerViewAdapter 
     .DataObjectHolder> { 
    private static String LOG_TAG = AndroidFlavorCursorRecyclerViewAdapter.class.getSimpleName(); 
    private List<AndroidFlavor> mDataset; 
    private static MyClickListener myClickListener; 
    private Cursor mCursor; 
    private int posterHeight; 
    private int posterWidth; 

    public static class DataObjectHolder extends RecyclerView.ViewHolder 
      implements View 
      .OnClickListener { 
     TextView label; 
     ImageView image; 

     public DataObjectHolder(View itemView) { 
      super(itemView); 
      //label = (TextView) itemView.findViewById(R.id.flavor_text); 
      image = (ImageView) itemView.findViewById(R.id.flavor_image); 
      Log.i(LOG_TAG, "Adding Listener"); 
      itemView.setOnClickListener(this); 
     } 

     @Override 
     public void onClick(View v) { 
      myClickListener.onItemClick(getPosition(), v); 
     } 
    } 

    public void setOnItemClickListener(MyClickListener myClickListener) { 
     this.myClickListener = myClickListener; 
    } 

    public AndroidFlavorCursorRecyclerViewAdapter(Cursor cursor, int w, int h) { 
     super(cursor); 
     //mCursor = cursor; 
     posterHeight = h; 
     posterWidth = w; 
    } 

    @Override 
    public DataObjectHolder onCreateViewHolder(ViewGroup parent, 
               int viewType) { 
     View view = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.flavor_item, parent, false); 

     DataObjectHolder dataObjectHolder = new DataObjectHolder(view); 
     return dataObjectHolder; 
    } 


    @Override 
    public void onBindViewHolderCursor(DataObjectHolder holder, Cursor cursor) { 
     Context context = holder.image.getContext(); 

     //Log.i(LOG_TAG,"image:" + cursor.getString(
     //  cursor.getColumnIndex(FlavorsContract.FlavorEntry.COLUMN_FILM_POSTER))); 

     //holder.label.setText(cursor.getString(
     //  cursor.getColumnIndex(FlavorsContract.FlavorEntry.COLUMN_VERSION_NAME))); 
     String url = cursor.getString(
       cursor.getColumnIndex(FlavorsContract.FlavorEntry.COLUMN_FILM_POSTER)); 
     Glide.with(context.getApplicationContext()).load(url) 
       .into(holder.image); 

     //Picasso.with(context).load("http://i.imgur.com/DvpvklR.png") 
     //  .into(holder.image); 

     Log.v(LOG_TAG, "onBindViewHolderCursor() " + cursor.getCount()); 
    } 

    // public void addItem(AndroidFlavor dataObj, int index) { 
    // mDataset.add(dataObj); 
    // notifyItemInserted(index); 
    //} 

    //public void deleteItem(int index) { 
    // mDataset.remove(index); 
    // notifyItemRemoved(index); 
    //} 

    //@Override 
    //public int getItemCount() { 
    // return mDataset.size(); 
    //} 

    public interface MyClickListener { 
     public void onItemClick(int position, View v); 
    } 

} 

Я думал, что это может быть хорошей идеей, чтобы поставить свою ImageView:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    > 

     <demo.example.com.customarrayadapter.SquareImageView 
      android:id="@+id/flavor_image" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_vertical" 
      android:scaleType="centerCrop" 
      /> 

</FrameLayout> 

SquareImageView класс:

import android.content.Context; 
import android.util.AttributeSet; 
import android.widget.ImageView; 

public class SquareImageView extends ImageView 
{ 
    public SquareImageView(Context context) 
    { 
     super(context); 
    } 

    public SquareImageView(Context context, AttributeSet attrs) 
    { 
     super(context, attrs); 
    } 

    public SquareImageView(Context context, AttributeSet attrs, int defStyle) 
    { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) 
    { 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
     setMeasuredDimension(getMeasuredWidth(), getMeasuredWidth()*2); //Snap to width 

    } 
} 
+0

Ничего себе! Удивительно, что мой пост просматривался 21 раз, но кто-нибудь может помочь. Если вам потребуются более подробные ребята, я был бы рад дать это. – chestchindian

ответ

0

Ваш вопрос понятен, но вы попробуйте только те эмуляторы? И почему я не нашел .size() нигде?

Вы уверены, что ваша фотография изменена и изменена без видимой видимости?

Если да, попробуйте взглянуть на консоль. Вы видели ошибку?

W/OpenGLRenderer: Bitmap too large to be uploaded into a texture 
+0

Извините, я не уверен, что вы подразумеваете под .size() – chestchindian

+0

Я не уверен, что вы подразумеваете под .size(), но если вы подразумеваете количество изображений, которые я возвращаю из одной из многих коллекций, таких как Hashmap или ArrayList(). Позвольте мне сказать, что я читаю контент-провайдер, поддерживаемый базой данных SQLite. Поэтому мне не нужен .size(). Если вы подразумеваете размер в отношении изображения, вы можете объяснить. – chestchindian

0

myFault! iment .override!

После загрузки Вашего изображения, убедитесь, что изображение, как было правильно изменить размер, прежде чем отправить его в контейнере макета:

public Bitmap loadFormattedImage(Context c ,int imv_icone){ 
    Glide.with(c) 
      .load(imv_icone) 
      .diskCacheStrategy(DiskCacheStrategy.ALL) 
      .override(300, 200); 

    return BitmapFactory.decodeResource(c.getResources(), imv_icone); 
} 

Вы уже попробовать это?