2014-10-31 4 views
0

GridView에 이미지가 있습니다. 이제는 ViewPagerimage을 표시하고 next Activity입니다. bitmap을 다른 class에있는 imageView (보기)으로 설정하려고합니다. 그러나 앱 이미지를 실행 한 후에는 ViewPager에 표시되지 않습니다. 고맙습니다.Android의 ViewPager에서 이미지를 표시하는 방법은 무엇입니까?

토끼는 여기

public class FullScreenViewActivity extends Activity 
{ 

    private FullScreenImageAdapter adapter; 
    private ViewPager viewPager; 
    private ArrayList<String> mThumbIds = new ArrayList<String>(); 

    @SuppressWarnings("unchecked") 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_fullscreen_view); 

     viewPager = (ViewPager) findViewById(R.id.pager); 
     Intent i = getIntent(); 

     mThumbIds = (ArrayList<String>) this.getIntent().getSerializableExtra("data"); 
     System.out.println("mThumbIds = " + mThumbIds); 

     int position = i.getIntExtra("id", 0); 
     System.out.println("position = " + position); 

     adapter = new FullScreenImageAdapter(this , mThumbIds); 
     viewPager.setAdapter(adapter); 
     viewPager.setCurrentItem(position); 
    } 
} 

코드

입니다 당신이 경로 (또는 URL)에서 이미지를로드하려면 어댑터 클래스 다음

public class FullScreenImageAdapter extends PagerAdapter implements OnTouchListener{ 

    private Activity _activity; 
    private ArrayList<String> _imagePaths; 
    private LayoutInflater inflater; 
    Bitmap bitmap; 

    // constructor 
    public FullScreenImageAdapter(Activity activity,ArrayList<String> imagePaths) { 
     this._activity = activity; 
     this._imagePaths = imagePaths; 
    } 

    @Override 
    public int getCount() { 
     return this._imagePaths.size(); 
    } 

    @Override 
    public boolean isViewFromObject(View view, Object object) { 
     return view == ((RelativeLayout) object); 
    } 


    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 

     Button btnClose; 
     Button btnEdit; 
     TouchImageView imgDisplay; 


     inflater = (LayoutInflater) _activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View viewLayout = inflater.inflate(R.layout.layout_fullscreen_image, container, false); 

     imgDisplay = (TouchImageView) viewLayout.findViewById(R.id.imgDisplay); 
     imgDisplay.setOnTouchListener((OnTouchListener) this); 

     BitmapFactory.Options options = new BitmapFactory.Options(); 
     options.inPreferredConfig = Bitmap.Config.ARGB_8888; 
     options.inSampleSize = 8; 
     bitmap = BitmapFactory.decodeFile(_imagePaths.get(position), options); 


     imgDisplay.setImageBitmap(bitmap); 


     btnClose = (Button) viewLayout.findViewById(R.id.btnClose); 
     btnClose.setOnClickListener(new View.OnClickListener() {    
      @Override 
      public void onClick(View v) { 
       _activity.finish(); 
      } 
     }); 



     ((ViewPager) container).addView(viewLayout); 
     return viewLayout; 
    } 


    @Override 
     public void destroyItem(ViewGroup container, int position, Object object) { 
      ((ViewPager) container).removeView((RelativeLayout) object); 

     } 


    public boolean onTouch(View arg0, MotionEvent arg1) { 
     // TODO Auto-generated method stub 
     return false; 
    } 
} 

는 TouchImageView 코드

public class TouchImageView extends ImageView { 

     Matrix matrix; 

     // We can be in one of these 3 states 
     static final int NONE = 0; 
     static final int DRAG = 1; 
     static final int ZOOM = 2; 
     int mode = NONE; 

     // Remember some things for zooming 
     PointF last = new PointF(); 
     PointF start = new PointF(); 
     float minScale = 1f; 
     float maxScale = 3f; 
     float[] m; 

     int viewWidth, viewHeight; 
     static final int CLICK = 3; 
     float saveScale = 1f; 
     protected float origWidth, origHeight; 
     int oldMeasuredWidth, oldMeasuredHeight; 

     ScaleGestureDetector mScaleDetector; 

     Context context; 

     public TouchImageView(Context context) { 
      super(context); 
      sharedConstructing(context); 
     } 

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

     private void sharedConstructing(Context context) { 
      super.setClickable(true); 
      this.context = context; 
      mScaleDetector = new ScaleGestureDetector(context, new ScaleListener()); 
      matrix = new Matrix(); 
      m = new float[9]; 
      setImageMatrix(matrix); 
      setScaleType(ScaleType.MATRIX); 

      setOnTouchListener(new OnTouchListener() { 

       @Override 
       public boolean onTouch(View v, MotionEvent event) { 
        mScaleDetector.onTouchEvent(event); 
        PointF curr = new PointF(event.getX(), event.getY()); 

        switch (event.getAction()) { 
        case MotionEvent.ACTION_DOWN: 
         last.set(curr); 
         start.set(last); 
         mode = DRAG; 
         break; 

        case MotionEvent.ACTION_MOVE: 
         if (mode == DRAG) { 
          float deltaX = curr.x - last.x; 
          float deltaY = curr.y - last.y; 
          float fixTransX = getFixDragTrans(deltaX, viewWidth, 
            origWidth * saveScale); 
          float fixTransY = getFixDragTrans(deltaY, viewHeight, 
            origHeight * saveScale); 
          matrix.postTranslate(fixTransX, fixTransY); 
          fixTrans(); 
          last.set(curr.x, curr.y); 
         } 
         break; 

        case MotionEvent.ACTION_UP: 
         mode = NONE; 
         int xDiff = (int) Math.abs(curr.x - start.x); 
         int yDiff = (int) Math.abs(curr.y - start.y); 
         if (xDiff < CLICK && yDiff < CLICK) 
          performClick(); 
         break; 

        case MotionEvent.ACTION_POINTER_UP: 
         mode = NONE; 
         break; 
        } 

        setImageMatrix(matrix); 
        invalidate(); 
        return true; // indicate event was handled 
       } 

      }); 
     } 

     public void setMaxZoom(float x) { 
      maxScale = x; 
     } 

     private class ScaleListener extends 
       ScaleGestureDetector.SimpleOnScaleGestureListener { 
      @Override 
      public boolean onScaleBegin(ScaleGestureDetector detector) { 
       mode = ZOOM; 
       return true; 
      } 

      @Override 
      public boolean onScale(ScaleGestureDetector detector) { 
       float mScaleFactor = detector.getScaleFactor(); 
       float origScale = saveScale; 
       saveScale *= mScaleFactor; 
       if (saveScale > maxScale) { 
        saveScale = maxScale; 
        mScaleFactor = maxScale/origScale; 
       } else if (saveScale < minScale) { 
        saveScale = minScale; 
        mScaleFactor = minScale/origScale; 
       } 

       if (origWidth * saveScale <= viewWidth 
         || origHeight * saveScale <= viewHeight) 
        matrix.postScale(mScaleFactor, mScaleFactor, viewWidth/2, 
          viewHeight/2); 
       else 
        matrix.postScale(mScaleFactor, mScaleFactor, 
          detector.getFocusX(), detector.getFocusY()); 

       fixTrans(); 
       return true; 
      } 
     } 

     void fixTrans() { 
      matrix.getValues(m); 
      float transX = m[Matrix.MTRANS_X]; 
      float transY = m[Matrix.MTRANS_Y]; 

      float fixTransX = getFixTrans(transX, viewWidth, origWidth * saveScale); 
      float fixTransY = getFixTrans(transY, viewHeight, origHeight 
        * saveScale); 

      if (fixTransX != 0 || fixTransY != 0) 
       matrix.postTranslate(fixTransX, fixTransY); 
     } 

     float getFixTrans(float trans, float viewSize, float contentSize) { 
      float minTrans, maxTrans; 

      if (contentSize <= viewSize) { 
       minTrans = 0; 
       maxTrans = viewSize - contentSize; 
      } else { 
       minTrans = viewSize - contentSize; 
       maxTrans = 0; 
      } 

      if (trans < minTrans) 
       return -trans + minTrans; 
      if (trans > maxTrans) 
       return -trans + maxTrans; 
      return 0; 
     } 

     float getFixDragTrans(float delta, float viewSize, float contentSize) { 
      if (contentSize <= viewSize) { 
       return 0; 
      } 
      return delta; 
     } 

     @Override 
     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
      super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
      viewWidth = MeasureSpec.getSize(widthMeasureSpec); 
      viewHeight = MeasureSpec.getSize(heightMeasureSpec); 

      // 
      // Rescales image on rotation 
      // 
      if (oldMeasuredHeight == viewWidth && oldMeasuredHeight == viewHeight 
        || viewWidth == 0 || viewHeight == 0) 
       return; 
      oldMeasuredHeight = viewHeight; 
      oldMeasuredWidth = viewWidth; 

      if (saveScale == 1) { 
       // Fit to screen. 
       float scale; 

       Drawable drawable = getDrawable(); 
       if (drawable == null || drawable.getIntrinsicWidth() == 0 
         || drawable.getIntrinsicHeight() == 0) 
        return; 
       int bmWidth = drawable.getIntrinsicWidth(); 
       int bmHeight = drawable.getIntrinsicHeight(); 

       Log.d("bmSize", "bmWidth: " + bmWidth + " bmHeight : " + bmHeight); 

       float scaleX = (float) viewWidth/(float) bmWidth; 
       float scaleY = (float) viewHeight/(float) bmHeight; 
       scale = Math.min(scaleX, scaleY); 
       matrix.setScale(scale, scale); 

       // Center the image 
       float redundantYSpace = (float) viewHeight 
         - (scale * (float) bmHeight); 
       float redundantXSpace = (float) viewWidth 
         - (scale * (float) bmWidth); 
       redundantYSpace /= (float) 2; 
       redundantXSpace /= (float) 2; 

       matrix.postTranslate(redundantXSpace, redundantYSpace); 

       origWidth = viewWidth - 2 * redundantXSpace; 
       origHeight = viewHeight - 2 * redundantYSpace; 
       setImageMatrix(matrix); 
      } 
      fixTrans(); 
     } 
    } 
+0

코드의 라인 아래에 제거? 그것은 당신의 커스텀 뷰입니까? 해당 클래스에 코드를 표시하십시오. –

+0

@ Seshu Vinay : 예, 사용자 정의보기입니다. –

+0

@ Seshu Vinay : - TouchImageView 클래스 코드를 게시했습니다. –

답변

-1

시도 : 코드는 매우 짧은 선 아래로 추가

BitmapFactory.Options options = new BitmapFactory.Options(); 
     options.inPreferredConfig = Bitmap.Config.ARGB_8888; 
     options.inSampleSize = 8; 
     bitmap = BitmapFactory.decodeFile(_imagePaths.get(position), options); 
     imgDisplay.setImageBitmap(bitmap); 

을 : TouchImageView 무엇

aQuery.image(imgDisplay).id(_imagePaths.get(position),true,true); 
+0

Anju, dont는 Aquery aQuery를 선언하는 것을 잊지 않습니다. 그런 다음 생성자에서 aQuery = new AQuery (활동); –

0

입니다 ImageView에 표시하려면 가장 빠르고 쉬운 방법 중 하나는 Picasso을 사용하는 것입니다. 코드 아래로

Picasso.with(getActivity()) 
    .load(path) 
    .resize(width, height) 
    .centerCrop() 
    .into(imageView); 
+1

Picasso는 잘 작동하지만 Universal Image Loader를 사용하는 것이 좋습니다. 그것은 많은 옵션이 있습니다. –

+0

예, 그 중 하나는 또한 좋은 대안입니다! :) – Harry

관련 문제