我正在制作一个图像下载应用程序,将图像设置为设备壁纸。为此,我用了一门课:
ImageDownloader.java
这个类有一个函数,它接受一个URL和一个ImageView。它使用在ImageView中定义的AsyncTask类下载并分配在URL中找到的图像。
我设法实现了它的预期,并希望扩大它的用途,以帮助我设置设备墙纸。事实证明,这非常复杂,但我在MainActivity.java中使用了以下代码:
public class MainActivity extends Activity {
private final ImageDownloader mDownload = new ImageDownloader();
public static Bitmap bima=null;
public static WallpaperManager wm;在onCreate中:
wm = WallpaperManager.getInstance(getApplicationContext());
mDownload.download(url,imageView);在MainActivity.Java中定义的方法:
public static void setbima(Bitmap bimu) {
try {wm.setBitmap(bimu);} catch (Exception e) {}
}然后,我在ImageDownloader类‘AsyncTask's onPostExecute中使用了如下函数:
MainActivity.setbima(bitmap);使用由AsyncTask类传递给那里的位图。
对于WallpaperManager对象,我想使用该位图,因为它的函数.setBitmap()接受位图,并将系统壁纸放到位图上。
我只是想知道我实现这个目标的方式是最佳的,还是有更简单的方法来实现这一点?这似乎是一个非常遥不可及的方式,如果我是一个初学者程序员,我不会感到惊讶。
发布于 2014-02-26 18:18:27
您现有的系统是有效的,因为它将基于网络的工作卸载到AsyncTask上,回调更新墙纸。
你没有给出你的ImageLoader AsyncTask的细节,但你可以把它们放在那里整理一些东西.它看起来就像:
public ImageLoader extends AsyncTask<String, Void, BitMap> {
private final Context context;
ImageLoader(Context context) {
this.context = context;
}
public BitMap doInBackground(String urlpath) {
// set the bitmap... do the work.
return bitmap;
}
public void PostExecute(BitMap result) {
try {
WallpaperManager.getInstance(context).setBitmap(result);
} catch (....) {
....
}
}
}有了上面的任务,在onCreate of MainActivity中就很简单了:
new ImageDownloader(getApplicationContext()).execute(url);这就是让它变得整洁的方法..。
https://codereview.stackexchange.com/questions/21635
复制相似问题