2011-02-17 2 views
0

내 안드로이드 응용 프로그램에서 ScrollImageView 클래스를 구현하는 :어떻게이 클래스를 발견


import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.Canvas; 
import android.graphics.Paint; 
import android.util.AttributeSet; 
import android.view.Display; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.WindowManager; 


// borrowed from https://sites.google.com/site/androidhowto/how-to-1/custom-scrollable-image-view 
public class ScrollImageView extends View { 
    private final int DEFAULT_PADDING = 10; 
    private Display mDisplay; 
    private Bitmap mImage; 

    /* Current x and y of the touch */ 
    private float mCurrentX = 0; 
    private float mCurrentY = 0; 

    private float mTotalX = 0; 
    private float mTotalY = 0; 
    /* The touch distance change from the current touch */ 
    private float mDeltaX = 0; 
    private float mDeltaY = 0; 

    int mDisplayWidth; 
    int mDisplayHeight; 
    int mPadding; 

    public ScrollImageView(Context context) { 
     super(context); 
     initScrollImageView(context); 
    } 

    public ScrollImageView(Context context, AttributeSet attributeSet) { 
     super(context); 
     initScrollImageView(context); 
    } 

    private void initScrollImageView(Context context) { 
     mDisplay = ((WindowManager)context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
     mPadding = DEFAULT_PADDING; 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     int width = measureDim(widthMeasureSpec, mDisplay.getWidth()); 
     int height = measureDim(heightMeasureSpec, mDisplay.getHeight()); 
     setMeasuredDimension(width, height); 
    } 

    private int measureDim(int measureSpec, int size) { 
     int result = 0; 
     int specMode = MeasureSpec.getMode(measureSpec); 
     int specSize = MeasureSpec.getSize(measureSpec); 

     if (specMode == MeasureSpec.EXACTLY) { 
      result = specSize; 
     } else { 
      result = size; 
      if (specMode == MeasureSpec.AT_MOST) { 
       result = Math.min(result, specSize); 
      } 
     } 
     return result; 
    } 

    public Bitmap getImage() { 
     return mImage; 
    } 

    public void setImage(Bitmap image) { 
     mImage = image; 
    } 

    public int getPadding() { 
     return mPadding; 
    } 

    public void setPadding(int padding) { 
     this.mPadding = padding; 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     if (event.getAction() == MotionEvent.ACTION_DOWN) { 
      mCurrentX = event.getRawX(); 
      mCurrentY = event.getRawY(); 
     } 
     else if (event.getAction() == MotionEvent.ACTION_MOVE) { 
      float x = event.getRawX(); 
      float y = event.getRawY(); 

      // Update how much the touch moved 
      mDeltaX = x - mCurrentX; 
      mDeltaY = y - mCurrentY; 

      mCurrentX = x; 
      mCurrentY = y; 

      invalidate(); 
     } 
     // Consume event 
     return true; 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     if (mImage == null) { 
      return; 
     } 

     float newTotalX = mTotalX + mDeltaX; 

     // Don't scroll off the left or right edges of the bitmap. 
     if (mPadding > newTotalX && newTotalX > getMeasuredWidth() - mImage.getWidth() - mPadding) 
      mTotalX += mDeltaX; 

     float newTotalY = mTotalY + mDeltaY; 

     // Don't scroll off the top or bottom edges of the bitmap. 
     if (mPadding > newTotalY && newTotalY > getMeasuredHeight() - mImage.getHeight() - mPadding) 
      mTotalY += mDeltaY; 

     Paint paint = new Paint(); 
     canvas.drawBitmap(mImage, mTotalX, mTotalY, paint); 
    } 
}

내 응용 프로그램과 함께 사용하는 방법을 난처한 상황에 빠진입니다.

세로 및 가로로 스크롤 할 수있는 비트 맵 이미지를 표시하려면 가로 방향으로 놓을 때 내 응용 프로그램을 원합니다. 내 이미지를 URL에서 가져 와서 프로그래밍 방식으로 비트 맵으로 만듭니다. 내 비트 맵 이미지를 반환하는 메서드를 호출합니다.

아이디어가 있으십니까?

답변

1

setImage 메서드는 비트 맵을 사용합니다. 따라서 프로그래밍 방식으로 액티비티에서이 뷰를 만들고 비트 맵을 사용하여 이미지를 설정 한 다음 레이아웃을 뷰에 배치 할 수 있어야합니다.

마일리지가 다를 수 있으므로 이전에이 클래스를 본 적이 없습니다.)