2016-06-28 68 views
0

我正在创建一个壁纸应用程序,并且我想将Palette类的getLightMutedColor()应用于每个壁纸下面的文本框。但是它重新启动应用程序会产生问题。如何将颜色应用于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() { 

     } 
    }); 
相关问题