use*_*637 2 java android bitmap imageview android-asynctask
好吧,所以这段代码就在Android开发者网站上,该网站设置ImageView为Bitmap:
class BitmapWorkerTask extends AsyncTask<Integer, Void, Bitmap> {
private final WeakReference<ImageView> imageViewReference;
private int data = 0;
public BitmapWorkerTask(ImageView imageView) {
// Use a WeakReference to ensure the ImageView can be garbage collected
imageViewReference = new WeakReference<ImageView>(imageView);
}
// Decode image in background.
@Override
protected Bitmap doInBackground(Integer... params) {
data = params[0];
return decodeSampledBitmapFromResource(getResources(), data, 100, 100));
}
// Once complete, see if ImageView is still around and set bitmap.
@Override
protected void onPostExecute(Bitmap bitmap) {
if (imageViewReference != null && bitmap != null) {
final ImageView imageView = imageViewReference.get();
if (imageView != null) {
imageView.setImageBitmap(bitmap);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,我想做的不是做
imageView.setImageBitmap(bitmap);我想返回,Bitmap然后我可以在我的主UI中使用它.有什么办法可以做到这一点吗?对于我缺乏知识感到抱歉AsyncTask,我刚开始学习它.谢谢!
ume*_*k44 11
实际上不需要返回位图,而是在主Ui线程中使用它.您可以在PostExecute上执行此操作,因为postExecute在UI线程中运行.你的问题??是的,你可以从AsynTask返回位图,你可以做这样的事情
private class myTask extends AsyncTask<Void,Void,Bitmap>{
protected Bitmap doInBackground(Void... params) {
//do stuff
return bitmap;
}
@Override
protected void onPostExecute(Bitmap result) {
//do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
现在你可以通过调用获取位图
Bitmap returned_bitmap = new myTask().execute().get()
Run Code Online (Sandbox Code Playgroud)
再次这不好,这会挂起您的UI.但你可以从这样的Aysnc中获得价值.
您可以做的另一种方法是使用interface实现回调
public interface MyInterface
{
public void onPostExecute();
}
Run Code Online (Sandbox Code Playgroud)
活动类
public class MyActivity extends Activity implements MyInterface{
private Bitmap Image;
public void onCreate(Bundle b)
{
super.onCreate(b);
new MyTask(this).execute();
}
@Override
public void onPostExecute() {
//Now you have your bitmap update by do in background
//do stuff here
}
private class MyTask extends AsyncTask<Void, Void, Void>
{
MyInterface myinterface;
MyTask(MyInterface mi)
{
myinterface = mi;
}
@Override
protected Void doInBackground(Void... params) {
//firt declare bitmap as class member of MyActivity
//update bitmap here and then call
myinterface.onPostExecute();
return null;
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9841 次 |
| 最近记录: |