下面是我的编码,它会在调用此Activity时加载图像。但我希望在从服务器检索图像时显示progressDialog,而不是仅向用户显示黑屏。我听说AsyncTask能够做到,但我坚持在哪里放置AsyncTask函数并调用它。
public class LargeImageScroller extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new SampleView(this));
}
private static class SampleView extends View {
private static Bitmap bmLargeImage; //bitmap large enough to be scrolled
private static Rect displayRect = null; //rect we display to
private Rect scrollRect = null; //rect we scroll over our bitmap with
private int scrollRectX = 0; //current left location of scroll rect
private int scrollRectY = 0; //current top location of scroll rect
private float scrollByX = 0; //x amount to scroll by
private float scrollByY = 0; //y amount to scroll by
private float startX = 0; //track x from one ACTION_MOVE to the next
private float startY = 0; //track y from one ACTION_MOVE to the next
public SampleView(Context context) {
super(context);
displayRect = new Rect(0, 0, displayWidth, displayHeight);
scrollRect = new Rect(0, 0, displayWidth, displayHeight);
bmLargeImage = Bitmap.createBitmap(1035 , 665, Config.ARGB_8888);
bmLargeImage = createMap(this.getContext());
}
public boolean onTouchEvent(MotionEvent event) {....}
protected void onDraw(Canvas canvas) {....}
private static Bitmap createMap(Context context) {...}
private static Drawable LoadImageFromWebOperations(String url) {....}
private static Bitmap decodeFile(File f, int requiredSize) {...}
}
}
我想知道在哪里放置AsyncTask函数,以便在程序从服务器/缓存加载图像时显示progressDialog。我在互联网上发现的大多数消息来源并没有多说。
答案 0 :(得分:0)
AsyncTask在某种程度上就像一个线程。它用于处理一些耗时的操作,因此不会阻止主线程。 在您的情况下,AsyncTask是合适的。但是,您想要放置它的位置取决于您的逻辑。
请阅读SDK:AsyncTask以获取有关它的更多信息。还有一个可以帮助您的代码段。
添加了:
嗯,我理解你的担忧。如果您只想显示一个进度条,告诉用户该应用程序正在从服务器下载图像。你可以这样处理:
1.创建包含ProgressBar的xml布局文件
2.在Class LargeImageScroller的OnCreate中,调用setContentView(R.layout.that_layout)
以显示进度条,并启动AsyncTask以下载图像。
3.Inside AsyncTask,覆盖onProgressUpdate(Integer... progress)
告诉ProgressBar下载进度
4.在AsyncTask内部,覆盖onPostExecute(Long result)
。当AsyncTask完成时,将调用此方法。在这里你可以:S ampleView sv=new SampleView(this)
,然后将图像传递给sv对象。然后拨打setContentView(sv)
以显示您的图片。
这只是我的思路。我认为您可以在LargeImageScroller类或SampleView类中使用AsyncTask。希望ithis评论有所帮助。