[英]How to update the selector(StateListDrawable) images using picasso
I want to load a two images from their own url using picasso and use them as a statelist like: 我想使用毕加索从自己的网址加载两个图像,并将它们用作状态列表,例如:
<item android:drawable="@drawable/sidebar_news_selected" android:state_selected="true"/>
<item android:drawable="@drawable/sidebar_news_selected" android:state_activated="true"/>
<item android:drawable="@drawable/sidebar_news_normal"/>
how can i do that? 我怎样才能做到这一点?
Update : 更新 :
Thanks to Maddy
, i tried his answer and now i stock in that like this: 感谢Maddy
,我尝试了他的答案,现在我像这样存储库存:
final StateListDrawable drawable = new StateListDrawable();
final Picasso picasso = Picasso.with(this.context);
target_normal = new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
Drawable drawImage = new BitmapDrawable(context.getResources(), bitmap);
drawable.addState(new int[]{android.R.attr.state_enabled}, drawImage);
picasso.load(context.getString(R.string.server_address)+dItem.getIconNormal()).into
(target_normal);
target_selected = new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
Drawable drawImage = new BitmapDrawable(context.getResources(), bitmap);
drawable.addState(new int[]{android.R.attr.state_selected}, drawImage);
drawable.addState(new int[]{android.R.attr.state_checked}, drawImage);
picasso.load(context.getString(R.string.server_address)+dItem.getIconSelected())
.into(target_selected);
drawerHolder.icon.setImageDrawable(drawable);
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
};
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
};
but it doesn't work. 但这不起作用。
I think you can't write to drawable folder of apk at runtime. 我认为您无法在运行时写入apk的drawable文件夹。 But you can do what you want dynamically in code. 但是,您可以在代码中动态地执行所需的操作。
# Convert Picasso's Bitmap to Drawable
Drawable d = new BitmapDrawable(getResources(),bitmap);
#Create StateListDrawable
StateListDrawable stateList = new StateListDrawable();
stateList.addState(new int[] {android.R.attr.state_pressed},drawable1);
stateList.addState(new int[] {android.R.attr.state_focused},drawable2);
#Add Background
MyButton.setBackgroundDrawable(stateList);
Use code on following lines to get the BitMap from Picasso. 在以下行上使用代码从毕加索获取BitMap。
//To Load image from Picasso
private Target target = new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
}
@Override
public void onBitmapFailed() {
}
}
private void someMethod() {
Picasso.with(this).load("url").into(target);
}
@Override
public void onDestroy() { // could be in onPause or onStop
Picasso.with(this).cancelRequest(target);
super.onDestroy();
}
Thanks to Maddy
final code looks like this: 感谢Maddy
最终代码如下所示:
final StateListDrawable stateListDrawable = new StateListDrawable();
final Picasso picasso = Picasso.with(this.context);
// selected and checked state
target_selected = new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
Drawable drawImage = new BitmapDrawable(context.getResources(), bitmap);
stateListDrawable.addState(new int[]{android.R.attr.state_selected}, drawImage);
stateListDrawable.addState(new int[]{android.R.attr.state_activated}, drawImage);
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
};
picasso.load(context.getString(R.string.server_address_http) + dItem.getIconSelected())
.into(target_selected);
target_normal = new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
Drawable drawImage = new BitmapDrawable(context.getResources(), bitmap);
stateListDrawable.addState(StateSet.WILD_CARD, drawImage);
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
};
picasso.load(context.getString(R.string.server_address_http) + dItem.getIconNormal())
.into(target_normal);
drawerHolder.icon.setImageDrawable(stateListDrawable);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.