Android 如何使用AsyncTask在PaperAdapter中显示URL图像
最后,我更改代码并使用univeral image loader库 我使用paperadapter来显示url图像,就像代码一样,工作正常Android 如何使用AsyncTask在PaperAdapter中显示URL图像,android,Android,最后,我更改代码并使用univeral image loader库 我使用paperadapter来显示url图像,就像代码一样,工作正常 @Override public Object instantiateItem(final ViewGroup container, final int position) { Drawable[] imageDrawable = new Drawable[3]; for (int i = 0; i < 3; i++) { imageDrawable[
@Override
public Object instantiateItem(final ViewGroup container, final int position) {
Drawable[] imageDrawable = new Drawable[3];
for (int i = 0; i < 3; i++) {
imageDrawable[i] = LoadImageFromWebOperations(server_url+ image_name.replace(" ","")+ "_0" +String.valueOf(i + 1) + ".jpg");
}
imageView = new ImageView(mContext);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setImageDrawable(imageDrawable[position]);
container.addView(imageView, 0);
return imageView;
}
但是我想使用asynctask来实现这一点,就像代码一样
@Override
public Object instantiateItem(final ViewGroup container, final int position) {
AsyncTask<String, Void, Drawable[]> loadingImage = new AsyncTask<String, Void, Drawable[]>(){
@Override
protected Drawable[] doInBackground(String... params) {
// TODO Auto-generated method stub
Drawable imageDrawable[] = new Drawable[3];
for (int i = 0; i < 3; i++) {
imageDrawable[i] = LoadImageFromWebOperations(server_url
+ image_name.replace(" ","")+ "_0" + String.valueOf(i + 1) + ".jpg");
System.out.println("doInBackground="+position);
}
return imageDrawable;
}
@Override
protected void onPostExecute(Drawable[] result) {
System.out.println("onPostExecute="+position);
imageView = new ImageView(getBaseContext());
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setImageDrawable(result[position]);
container.addView(imageView, 0);
}
});
}
}; loadingImage.execute();
return imageView;
}
工作不好,我发现位置1是空的,没有图片,但是位置0和2不是空的,等待一些建议,谢谢 这是所有代码:
public class ProductDetailActivity1 extends FragmentActivity {
ImageAdapter mAdapter;
ViewPager mPager;
CirclePageIndicator mIndicator;
private String server_url;
ImageView imageView;
protected ScrollView mScrollView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_product_detail1);
mScrollView = (ScrollView)findViewById(R.id.card_scrollview);
getActionBar();
getActionBar().setHomeButtonEnabled(true);
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setDisplayShowTitleEnabled(true);
getActionBar().setTitle(R.string.product_detail);
Intent intent = getIntent();
server_url = intent.getStringExtra("SERVER_URL");
mAdapter = new ImageAdapter(getApplicationContext());
mPager = (ViewPager) findViewById(R.id.imageViewpager);
mPager.setAdapter(mAdapter);
mIndicator = (CirclePageIndicator) findViewById(R.id.indicator);
mIndicator.setViewPager(mPager);
mIndicator.setFillColor(0xFFFFFFFF);
mIndicator.setStrokeColor(0xFFFFFFFF);
mIndicator.setStrokeWidth(1);
mIndicator.setRadius(6 * getResources().getDisplayMetrics().density);
((CirclePageIndicator) mIndicator).setSnap(true);
mIndicator
.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrolled(int position,
float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Intent intent = new Intent(ProductDetailActivity1.this,
com.wangrui.ams.MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.product_detail, menu);
return true;
}
public class ImageAdapter extends PagerAdapter {
private Context mContext;
private Drawable[] imageDrawable = new Drawable[3];;
public ImageAdapter(Context cx) {
mContext = cx.getApplicationContext();
}
@Override
public Object instantiateItem(final ViewGroup container, final int position) {
AsyncTask<Void, Void, Drawable[]> loadingImage = new AsyncTask<Void, Void, Drawable[]>(){
@Override
protected Drawable[] doInBackground(Void... params) {
// TODO Auto-generated method stub
for (int i = 0; i < 3; i++) {
imageDrawable[i] = LoadImageFromWebOperations(server_url
+ image_name.replace(" ","")+ "_0" + String.valueOf(i + 1) + ".jpg");
System.out.println("position="+i);
}
return imageDrawable;
}
@Override
protected void onPostExecute(Drawable[] result) {
imageView = new ImageView(mContext);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setImageDrawable(result[position]);
mPager.getAdapter().notifyDataSetChanged();
((ViewPager) container).addView(imageView, position);
}
}; loadingImage.execute();
return imageView;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return 3;
}
@Override
public boolean isViewFromObject(final View view, final Object object) {
// TODO Auto-generated method stub
//return arg0 == (View) arg1;
return view == ((ImageView) object);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((ImageView) object);
}
}
private void showAlertMessage(String msg){
SuperToast superToast = new SuperToast(getApplicationContext());
superToast.setAnimations(SuperToast.Animations.FLYIN);
superToast.setDuration(SuperToast.Duration.LONG);
superToast.setBackground(SuperToast.Background.RED);
superToast.setTextSize(SuperToast.TextSize.EXTRA_SMALL);
superToast.setText(msg);
superToast.show();
}
private Drawable LoadImageFromWebOperations(String url) {
try {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.permitAll().build();
StrictMode.setThreadPolicy(policy);
InputStream is = (InputStream) new URL(url).getContent();
Drawable d = Drawable.createFromStream(is, "src name");
return d;
} catch (Exception e) {
System.out.println("Exc=" + e);
return null;
}
}
}
为什么每页都有一个加载多个图像的循环?上面哪一个代码是您希望使用的,您到底想做什么?@androiddeveloper感谢您的回复。我使用viewpaper指示器显示url中的图像。使用循环,因为这3个图像具有相似的文件名,但编号不同,但实例化项并不意味着您当前在该页面上。它只是加载页面。例如,如果您转到第1页,这意味着第0、1、2页需要调用此函数,以便用户在滚动屏幕时能够看到它们。如果希望侦听正在更改的页面,则需要调用setOnPageChangeListener。InstanceItem用于初始化页面,类似于AdapterView的getView,但不重复使用视图。另外,请回答我提出的问题,或者修改你的帖子,哪一个更好,这样我可以帮助你…而且,如果使用LoadImageFromWebOperations显示指标,它有一个误导性的名称…为什么你在回答中写它而不是编辑原始问题?而且,你仍然没有明确指出问题所在以及你想做什么。您是否希望每页显示一个从internet下载时显示的图像?@androiddeveloper抱歉我的错误,我是一个初学者。是的,我想使用viewpaper指示器库在每页中显示不同的图像,只显示,不下载。如果一切都是本地的,为什么有名为LoadImageFromWebOperations的URL和函数?无论如何,如果文件在应用程序中,您可以使用getIdentifier,如下所示:然后调用getResources.getDrawable。。。你从中得到了什么。