Coverroid android: как получить изображения с URL-адреса в потоке

Привет, я в настоящее время тестирую обтекание андроидов. Я пытался получить изображения с URL-адреса и отображать его в обложке. Я успешно загрузил изображения, но не смог вставить растровое изображение. Вот код, который я пробовал …

package com.example.coverflow; import java.io.FileInputStream; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.LinearGradient; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.PorterDuff.Mode; import android.graphics.PorterDuffXfermode; import android.graphics.Shader.TileMode; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.Toast; import android.widget.ImageView.ScaleType; import com.example.coverflow.CoverAdapterView.OnItemClickListener; public class CoverFlowExample extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); CoverFlow coverFlow; coverFlow = new CoverFlow(this); coverFlow.setAdapter(new ImageAdapter(this)); ImageAdapter coverImageAdapter = new ImageAdapter(this); coverImageAdapter.createReflectedImages(); coverFlow.setAdapter(coverImageAdapter); coverFlow.setSpacing(-15); coverFlow.setSelection(8, true); setContentView(coverFlow); coverFlow.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(CoverAdapterView<?> parent, View view, int position, long id) { // TODO Auto-generated method stub Log.v("possition ", " this position :"+position ); Toast.makeText(getApplicationContext(), "position "+position, Toast.LENGTH_SHORT).show(); } }); // Use this if you want to use XML layout file // setContentView(R.layout.main); // coverFlow = (CoverFlow) findViewById(R.id.coverflow); } public class ImageAdapter extends BaseAdapter { int mGalleryItemBackground; private Context mContext; private FileInputStream fis; //public Integer[] mImageIds ; private Integer[] mImageIds ={1,2,3,4,5}; /*private Integer[] mImageIds = { R.drawable.kasabian_kasabian, R.drawable.killers_day_and_age, R.drawable.garbage_bleed_like_me, R.drawable.death_cub_for_cutie_the_photo_album, R.drawable.kasabian_kasabian, R.drawable.kasabian_kasabian, R.drawable.killers_day_and_age, R.drawable.garbage_bleed_like_me, R.drawable.massive_attack_collected, R.drawable.kasabian_kasabian, R.drawable.kasabian_kasabian, R.drawable.kasabian_kasabian };*/ public int getCount2() { for(int i=0;i<5;i++) { ImageView imageView = new ImageView(mContext); URL url; try { url = new URL("http://www.psdgraphics.com/file/retro-tv-icon.jpg"); Bitmap bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream()); imageView.setImageBitmap(bmp); imageView.setId(i); //mImageIds[i]=i; } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return mImageIds.length; } private ImageView[] mImages; public ImageAdapter(Context c) { mContext = c; mImages = new ImageView[getCount2()]; } public boolean createReflectedImages() { // The gap we want between the reflection and the original image final int reflectionGap = 4; int index = 0; for (final int imageId : mImageIds) { // Bitmap originalImage = BitmapFactory.decodeResource( // getResources(), imageId); URL url; Bitmap originalImage= null; try { url = new URL("http://image10.bizrate-images.com/resize?sq=60&uid=2216744464"); originalImage = BitmapFactory.decodeStream(url.openConnection().getInputStream()); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } int width = originalImage.getWidth(); int height = originalImage.getHeight(); Log.v("width:",""+width+","+height); // This will not scale but will flip on the Y axis Matrix matrix = new Matrix(); matrix.preScale(1, -1); Log.v("errer her", "aftr originalImage"); // Create a Bitmap with the flip matrix applied to it. // We only want the bottom half of the image Bitmap reflectionImage = Bitmap.createBitmap(originalImage, 0, height / 2, width, height / 2, matrix, false); // Create a new bitmap with same width but taller to fit // reflection Bitmap bitmapWithReflection = Bitmap.createBitmap(width, (height + height / 2), Config.ARGB_8888); // Create a new Canvas with the bitmap that's big enough for // the image plus gap plus reflection Canvas canvas = new Canvas(bitmapWithReflection); // Draw in the original image canvas.drawBitmap(originalImage, 0, 0, null); // Draw in the gap Paint deafaultPaint = new Paint(); canvas.drawRect(0, height, width, height + reflectionGap, deafaultPaint); // Draw in the reflection canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null); Log.v("errer her", "aftr reflectionImage"); // Create a shader that is a linear gradient that covers the // reflection Paint paint = new Paint(); LinearGradient shader = new LinearGradient(0, originalImage.getHeight(), 0, bitmapWithReflection.getHeight() + reflectionGap, 0x70ffffff, 0x00ffffff, TileMode.CLAMP); // Set the paint to use this shader (linear gradient) paint.setShader(shader); // Set the Transfer mode to be porter duff and destination in paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN)); // Draw a rectangle using the paint with our linear gradient canvas.drawRect(0, height, width, bitmapWithReflection.getHeight() + reflectionGap, paint); Log.v("errer her", "aftr drawrect"); ImageView imageView = new ImageView(mContext); imageView.setImageBitmap(bitmapWithReflection); imageView.setLayoutParams(new CoverFlow.LayoutParams(120, 180)); imageView.setScaleType(ScaleType.MATRIX); mImages[index++] = imageView; } return true; } public int getCount() { // Log.v("getCoutn(int count)", "" + mImageIds.length); return mImageIds.length; } public Object getItem(int position) { // Log.v("getItem(int position)", "" + position); return position; } public long getItemId(int position) { // Log.v("getItemID(int position)", "" + position); return position; } public View getView(int position, View convertView, ViewGroup parent) { // Use this code if you want to load from resources // ImageView i = new ImageView(mContext); // i.setImageResource(mImageIds[position]); // i.setLayoutParams(new CoverFlow.LayoutParams(130, 130)); // i.setScaleType(ImageView.ScaleType.MATRIX); // return i; // Log.v("getview int position mImages", ""+position); ImageView imageView = new ImageView(mContext); URL url; try { url = new URL("http://image10.bizrate-images.com/resize?sq=60&uid=2216744464"); Bitmap bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream()); imageView.setImageBitmap(bmp); imageView.setId(position); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return imageView; //return mImages[position]; } /** * Returns the size (0.0f to 1.0f) of the views depending on the * 'offset' to the center. */ public float getScale(boolean focused, int offset) { /* Formula: 1 / (2 ^ offset) */ Log.v("getScale float ", " " + focused + " " + offset); return Math.max(0, 1.0f / (float) Math.pow(2, Math.abs(offset))); } // View v=getView(position, convertView, parent); } } 

Solutions Collecting From Web of "Coverroid android: как получить изображения с URL-адреса в потоке"

1.Создать ImageAdater.java

 package com.sample.Adapters; import java.util.ArrayList; import android.app.Activity; import android.graphics.BitmapFactory; import android.graphics.drawable.BitmapDrawable; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.widget.BaseAdapter; import android.widget.ImageView; public class ImageAdapter extends BaseAdapter { int mGalleryItemBackground; private Activity mContext; ArrayList<byte[]> imgarray ; public ImageAdapter(Activity c,ArrayList<byte[]> array) { mContext = c; this.imgarray = array ; } public int getCount() { return imgarray.size(); } public Object getItem(int position) { return position; } public long getItemId(int position) { return position; } public View getView( final int position, View convertView, ViewGroup parent) { ImageView i = new ImageView(mContext); i.setImageBitmap(BitmapFactory.decodeByteArray(imgarray.get(position), 0, imgarray.get(position).length)); i.setLayoutParams(new com.sample.custom.CoverFlow.LayoutParams(LayoutParams.WRAP_CONTENT-20, LayoutParams.WRAP_CONTENT-20)); i.setScaleType(ImageView.ScaleType.CENTER_INSIDE); BitmapDrawable drawable = (BitmapDrawable) i.getDrawable(); drawable.setAntiAlias(true); return i; } public float getScale(boolean focused, int offset) { /* Formula: 1 / (2 ^ offset) */ return Math.max(0, 1.0f / (float)Math.pow(2, Math.abs(offset))); } } 

2. Способ загрузки

 public static byte[] getLogoImage(String url){ try { URL imageUrl = new URL(url); URLConnection ucon = imageUrl.openConnection(); InputStream is = ucon.getInputStream(); BufferedInputStream bis = new BufferedInputStream(is); ByteArrayBuffer baf = new ByteArrayBuffer(500); int current = 0; while ((current = bis.read()) != -1) { baf.append((byte) current); } return baf.toByteArray(); } catch (Exception e) { Log.d("ImageManager", "Error: " + e.toString()); } return null; } 

3.Declare один ArrayList<byte[]> arraylistgallery = new ArrayList<byte[]>();

Здесь я предполагаю, что общее количество предстоящих изображений будет 10

 for(int i=0 ; i<10 ; i++){ arraylistgallery.add(i,getLogoImage("http://www.psdgraphics.com/file/retro-tv-icon.jpg")); } 

DownloadImages in AsyncTask И сохранить в arraylistgallery ArrayList И пройти, как это

  coverFlow.setVisibility(View.VISIBLE); coverFlow.setAdapter(new ImageAdapter(this,arraylistgallery)); coverFlow.setSpacing(5); coverFlow.setSelection(arraylistgallery.size()-1, true); coverFlow.setAnimationDuration(1000); 

Для этого используйте код ниже.

 coverFlow = new CoverFlow(this); ImageAdapter coverImageAdapter = new ImageAdapter(this); coverFlow.setAdapter(coverImageAdapter); coverFlow.setSpacing(0); coverFlow.setSelection(0, true); coverFlow.setLayoutParams(params); coverFlow.setOnItemClickListener(this); coverFlow.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(CoverAdapterView<?> parent, View view, int position, long id){ // TODO Auto-generated method stub } @Override public void onNothingSelected(CoverAdapterView<?> parent) { // TODO Auto-generated method stub } }); 

ImageAdapter.java

 public class ImageAdapter extends BaseAdapter { public ImageLoader imageLoader; public ImageAdapter(Context c) { Constants.ctx = c; imageLoader = new ImageLoader(Constants.ctx.getApplicationContext()); } public int getCount() { return Constants.mIsFeaturedTrueImage.size(); } public Object getItem(int position) { return position; } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { System.gc(); ImageView i = new ImageView(Constants.ctx); if (Constants.mIsFeaturedTrueImage.get(position).equals("null") || Constants.mIsFeaturedTrueImage.get(position).equals("")) { System.out.println("Hello if"); i.setImageResource(R.drawable.icon); } else { System.out.println("Hello else if"); imageLoader.DisplayImage(Constants.mIsFeaturedTrueImage.get(position), i); } i.setLayoutParams(new CoverFlow.LayoutParams( mConstant.mImageWidth + 28, mConstant.mImageHeight + 28)); i.setScaleType(ImageView.ScaleType.MATRIX); return i; } /** * Returns the size (0.0f to 1.0f) of the views depending on the * 'offset' to the center. */ public float getScale(boolean focused, int offset) { /* Formula: 1 / (2 ^ offset) */ return Math.max(0, 1.0f / (float) Math.pow(2, Math.abs(offset))); } } } 

И используйте класс imageLoader для загрузки изображений из URL и Constants.mIsFeaturedTrueImage.get (position) – это список адресов URL-адреса массива.

Я пишу демо для реализации этой проблемы, я объединяя поток галереи и универсальную загрузку изображений, вы можете попробовать, спасибо! Демо вы можете скачать с этого сайта: https://github.com/Jonguo/galleryflow