2011-11-24 74 views
0

你好家伙我是新来的机器人,所以要温柔与我:),
我有画廊我需要加载图像我有很多的他们,图像加载性能我已经通过使用AsyncTask解决了。
Android:图片与滑动跳过图像和缓慢加载

现在我有滚动画廊的问题,它跳过图像,它看起来不好。

现在我试图实现我的自定义库,并在没有成功,它只是将无法正常工作
现在我还有一个问题

final ScrollableGallery galleryView = (ScrollableGallery)findViewById(R.id.gallery); //always returns null 

突然,你能explane为什么吗?

下面的代码:

import android.content.Context; 
import android.util.AttributeSet; 
import android.view.MotionEvent; 
import android.widget.Gallery; 

public class ScrollableGallery extends Gallery { 

    public ScrollableGallery(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    public ScrollableGallery(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public ScrollableGallery(Context context) { 
     super(context); 
    } 

    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 

     // limit the max speed in either direction 
     if (velocityX > 1200.0f) { 
      velocityX = 1200.0f; 
     } else if (velocityX < 1200.0f) { 
      velocityX = -1200.0f; 
     } 
     return super.onFling(e1, e2, velocityX, velocityY); 
    } 
} 

的XML部分:

<ScrollableGallery 
     android:id="@+id/gallery" 
     android:layout_width="675dp" 
     android:layout_height="492dp" 
     android:layout_marginLeft="62dp" 
     android:layout_marginTop="225dp" 
     android:scaleType="fitXY" > 
    </ScrollableGallery> 


的Actvity调用:
的启动

final ScrollableGallery galleryView = (ScrollableGallery)findViewById(R.id.gallery); 


适配器开始:

galleryV.setAdapter(new BaseAdapter() {      
      public int getCount() {    
       return _imageList.size(); 
      } 

      public Object getItem(int position) { 
       return _imageList.get(position); 
      } 

      public long getItemId(int position) { 
       _position = position; 
       return position; 
      } 

      public View getView(final int position, View convertView,final ViewGroup parent) {    
       if (convertView == null) { 
        convertView = new ImageView(Database.this); 
       }    
       ImageDispatcher dispatch = new ImageDispatcher(((ImageView) convertView));    
       dispatch.execute(_imageList.get(position));          
       ((ImageView) convertView).setScaleType(ImageView.ScaleType.FIT_XY); 
       ((ImageView) convertView).setLayoutParams(new ScrollableGallery.LayoutParams(675, 492)); 

       return convertView; 
      }   
     }); 
<br/> 
The image dispatcher: 

    import java.lang.ref.WeakReference; 
    import android.graphics.Bitmap; 
    import android.graphics.BitmapFactory; 
    import android.os.AsyncTask; 
    import android.widget.ImageView; 

    public class ImageDispatcher extends AsyncTask<String, Void, Bitmap> { 

     private final WeakReference<ImageView> imageViewReference; 

     public ImageDispatcher(ImageView imageView) { 
      imageViewReference = new WeakReference<ImageView>(imageView); 
     } 

     @Override 
     // Actual download method, run in the task thread 
     protected Bitmap doInBackground(String... params) { 

      return ShrinkBitmap(params[0], 300 ,300); 
     } 

     @Override 
     protected void onPostExecute(Bitmap bitmap) { 
      if (isCancelled()) { 
       bitmap = null; 
      } 

      if (imageViewReference != null) { 
       ImageView imageView = imageViewReference.get(); 
       if (imageView != null) { 
        imageView.setImageBitmap(bitmap); 
       } 
      } 
     } 

     /********************************************************* 
     * PRIVATE METHODS 
     *********************************************************/ 
     @SuppressWarnings("unused") 
     private Bitmap ShrinkBitmap(String file, int width, int height) { 
      BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options(); 
      bmpFactoryOptions.inTempStorage = new byte[16 * 1024]; 
      bmpFactoryOptions.inJustDecodeBounds = true; 
      Bitmap bitmap = BitmapFactory.decodeFile(file, bmpFactoryOptions); 
      int heightRatio = (int) Math.ceil(bmpFactoryOptions.outHeight/(float) height); 
      int widthRatio = (int) Math.ceil(bmpFactoryOptions.outWidth/(float) width); 

      bmpFactoryOptions.inSampleSize = heightRatio > 1 || widthRatio > 1 ? heightRatio : widthRatio;     
      bmpFactoryOptions.inJustDecodeBounds = false; 
      bitmap = BitmapFactory.decodeFile(file, bmpFactoryOptions); 
      return bitmap; 
     } 

     @SuppressWarnings("unused") 
     private Bitmap ShrinkBitmap(String file) { 
      BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options(); 
      bmpFactoryOptions.inTempStorage = new byte[16 * 1024]; 
      bmpFactoryOptions.inJustDecodeBounds = true; 

      Bitmap bMap = BitmapFactory.decodeFile(file);  
      Bitmap bMapScaled = Bitmap.createScaledBitmap(bMap,150, 100, true); 

      return bMapScaled; 
     } 
    } 

我觉得这一切都让我对这个部分的代码, 现在的问题是:
如何使滚动中,一个图像时间,以及如何显示加载指标,如我在网络中加载图像时?

任何代码修复将高度赞赏!

预先感谢您...

回答

0

而不是声明你在xml中的画廊。

Gallery gallery = new CustomGaller(getActivity()); 

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams (LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT); 
      params.addRule(RelativeLayout.RIGHT_OF, R.id.left); 
      params.addRule(RelativeLayout.LEFT_OF,R.id.right); 
      gallery.setLayoutParams(params); 
      gallery.setAdapter(new GalleryAdapter(<Pass values>)); 

您不得不将View id传递给CustomGallery。

0

在您的自定义库

@Override 
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) { 
    -->> super.onFling(e1, e2, 20, velocityY); <<-- 

    return false; 
} 

尝试修改的第三个参数。

+0

没有工作 – IamStalker