2016-06-28 9 views
0

Я создаю приложение для обоев, и я хочу применить getLightMutedColor() из класса Palette в текстовое поле под каждым обоймом. Но это создает проблемы при перезапуске приложения.Как применить цвет к текстовому полю в GridView?

Так вот как это должно быть

So this is how it should be

На перезапустить приложение изменения цвета на белом

On restarting the app the color changes to white

Вот мой адаптер класса

public class GridViewAdapter extends ArrayAdapter<GridItem> { 

private Context mContext; 
private int layoutResourceId; 
private ArrayList<GridItem> mGridData = new ArrayList<GridItem>(); 

public GridViewAdapter(Context mContext, int layoutResourceId, ArrayList<GridItem> mGridData) { 
    super(mContext, layoutResourceId, mGridData); 
    this.layoutResourceId = layoutResourceId; 
    this.mContext = mContext; 
    this.mGridData = mGridData; 
} 


/** 
* Updates grid data and refresh grid items. 
* @param mGridData 
*/ 
public void setGridData(ArrayList<GridItem> mGridData) { 
    this.mGridData = mGridData; 
    notifyDataSetChanged(); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View row = convertView; 
    final ViewHolder holder; 

    if (row == null) { 
     LayoutInflater inflater = ((Activity) mContext).getLayoutInflater(); 
     row = inflater.inflate(layoutResourceId, parent, false); 
     holder = new ViewHolder(); 
     holder.titleTextView = (TextView) row.findViewById(R.id.grid_item_title); 
     holder.imageView = (ImageView) row.findViewById(R.id.grid_item_image); 
     row.setTag(holder); 
    } else { 
     holder = (ViewHolder) row.getTag(); 
    } 

    GridItem item = mGridData.get(position); 
    holder.titleTextView.setText(Html.fromHtml(item.getTitle())); 
    Picasso.with(mContext) 
      .load(item.getImage()) 
      .into(new Target() { 
       @Override 
       public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { 
        Palette p = Palette.from(bitmap).generate(); 
        int defaultColor= 0x000000; 
        int vbcol = p.getLightMutedColor(defaultColor); 
        holder.titleTextView.setBackgroundColor(vbcol); 
       } 

       @Override 
       public void onBitmapFailed(Drawable errorDrawable) { 

       } 

       @Override 
       public void onPrepareLoad(Drawable placeHolderDrawable) { 

       } 
      }); 
    Picasso.with(mContext).load(item.getImage()).into(holder.imageView); 
    return row; 
} 

static class ViewHolder { 
    TextView titleTextView; 
    ImageView imageView; 
} 
} 
+0

Я никогда не использовал это, но я думаю, что это может быть из этого 'int vbcol = p.getLi ghtMutedColor (defaultColor);» можете ли вы добавить точку останова и чекать что не так? –

+0

Я раньше не использовал точку останова. но я попробовал, и он показывает белый фон в текстовых полях. – r2d2arto

+0

Я не пробовал это, но могу попробовать это в AsyncTask .... –

ответ

0

Это Асинхронный wayt сделать это, Вы можете посмотреть на это: https://developer.android.com/reference/android/support/v7/graphics/Palette.html

Попробуйте этот код, может быть, он будет работать

Palette.from(bitmap).generate(new PaletteAsyncListener() { 
    public void onGenerated(Palette p) { 
     int defaultColor= 0x000000; 
     int vbcol = p.getLightMutedColor(defaultColor); 
     holder.titleTextView.setBackgroundColor(vbcol); 
    } 
}); 
0

получал NullPointerException со всем, так это было что изображение не было загружено, поэтому я сделал это с этим обратным вызовом

 @Override 
     public void onSuccess() { 
      BitmapDrawable bd = (BitmapDrawable)holder.imageView.getDrawable(); 
      Bitmap bm =bd.getBitmap(); 
      Palette p = Palette.from(bm).generate(); 
      int defcol=0x000000; 
      holder.titleTextView.setBackgroundColor(p.getLightVibrantColor(defcol)); 
     } 

     @Override 
     public void onError() { 

     } 
    }); 

 Смежные вопросы

  • Нет связанных вопросов^_^