2011-10-23 7 views
0

문제가 있습니다! 큰 이미지 (1600x1200)를로드하고 앱이 시작될 때보기가 왼쪽 상단 구석입니다. 시작시 센터 나 다른 위치를 보여주고 싶습니다. 또는이 좌표에서 특정 좌표와 뷰 시작점을 부여하면 더 좋을 것입니다. 당신은 어떤 생각이 있습니까 ??특정 위치에서 이미지보기 시작

미리 감사드립니다.

답변

0

코드를 표시하지 않으므로 레이아웃이나 제한 사항에 대해서는 알지 못하지만 전체 화면에 ImageView이 있다고 가정합니다. 이 문제를 해결하는 한 가지 방법은 ScrollViewImageView -child가있는 것입니다. 그런 다음 ScrollView - 방법 scrollTo(int x, int y)을 사용하여 원하는 위치로 스크롤 할 수 있습니다.

더 여기 읽기 : http://developer.android.com/reference/android/widget/ScrollView.html

+0

감사합니다! 위 코드를 작성했습니다. 내가 어떻게 할 수 있는지 아십니까? – user1009490

0

내 코드는 다음과 같습니다 응답에 대한

public Scroll(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    mScroller = new Scroller(context); 
    mGestureDetector = new GestureDetector(this); 
    mScale = 1; 
    mZoomController = new ZoomButtonsController(this); 
    mZoomController.setAutoDismissed(true); 
    mZoomController.setOnZoomListener(this); 
    mZoomController.setZoomSpeed(25); 
    mZoomController.setZoomInEnabled(mScale < MAX_ZOOM); 
    mZoomController.setZoomOutEnabled(mScale > MIN_ZOOM); 
    makeZoomLabel(context, mZoomController); 

    mZoomFormat = NumberFormat.getPercentInstance(); 
    mZoomLabel.setText("Zoom: " + mZoomFormat.format(mScale)); 

    mPicture = makeContent(); 

    setVerticalScrollBarEnabled(true); 
    setHorizontalScrollBarEnabled(true); 
    TypedArray a = context.obtainStyledAttributes(R.styleable.Scroll); 
    initializeScrollbars(a); 
    a.recycle(); 
    mMatrix = new Matrix(); 
    mDst = new float[2]; 
} 

public Scroll(Context context) { 
    this(context, null); 
} 

@Override 
protected void onDetachedFromWindow() { 
    super.onDetachedFromWindow(); 
    mZoomController.setVisible(false); 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    return mGestureDetector.onTouchEvent(event); 
} 

@Override 
protected void onDraw(Canvas canvas) { 
    canvas.save(); 
    if (mScroller.computeScrollOffset()) { 
     mX = mScroller.getCurrX(); 
     mY = mScroller.getCurrY(); 
     invalidate(); 
    } 

    mMatrix.reset(); 
    mMatrix.preTranslate(mX * mScale, mY * mScale); 

    int w = getWidth(); 
    int h = getHeight(); 
    float pivotX = Math.max(Math.min(-mX, w/2), 2 * w - WIDTH - mX); 
    float pivotY = Math.max(Math.min(-mY, h/2), 2 * h - HEIGHT - mY); 
    mMatrix.preScale(mScale, mScale, pivotX, pivotY); 
    canvas.concat(mMatrix); 

    // draw content 
    mPicture.draw(canvas); 
    canvas.restore(); 
} 

@Override 
protected int computeHorizontalScrollExtent() { 
    return Math.round(computeHorizontalScrollRange() * getWidth()/(WIDTH * mScale)); 
} 
@Override 
protected int computeHorizontalScrollOffset() { 
    mMatrix.mapPoints(mDst, SRC); 
    float x = -mDst[0]/mScale; 
    return Math.round(computeHorizontalScrollRange() * x/WIDTH); 
} 
@Override 
protected int computeVerticalScrollExtent() { 
    return Math.round(computeVerticalScrollRange() * getHeight()/(HEIGHT * mScale)); 
} 
@Override 
protected int computeVerticalScrollOffset() { 
    mMatrix.mapPoints(mDst, SRC); 
    float y = -mDst[1]/mScale; 
    return Math.round(computeVerticalScrollRange() * y/HEIGHT); 
} 

public boolean onDown(MotionEvent e) { 
    mZoomController.setVisible(false); 
    return true; 
} 

public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
    int minX = (int) (getWidth() - WIDTH); 
    int minY = (int) (getHeight() - HEIGHT); 
    mScroller.fling((int) mX, (int) mY, (int) velocityX, (int) velocityY, minX, 0, minY, 0); 
    invalidate(); 
    return true; 
} 

public void onLongPress(MotionEvent e) { 
    mZoomController.setVisible(true); 
} 

public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { 
    mX -= distanceX/mScale; 
    mY -= distanceY/mScale; 
    mX = Math.max(getWidth() - WIDTH, Math.min(0, mX)); 
    mY = Math.max(getHeight() - HEIGHT, Math.min(0, mY)); 
    invalidate(); 
    return true; 
} 

public void onShowPress(MotionEvent e) { 
} 

public boolean onSingleTapUp(MotionEvent e) { 
    return false; 
} 

public void onVisibilityChanged(boolean visible) { 
} 

public void onZoom(boolean zoomIn) { 
    mScale += zoomIn? 0.1 : -0.1; 
    mScale = Math.min(MAX_ZOOM, Math.max(MIN_ZOOM, mScale)); 
    mZoomLabel.setText("Zoom: " + mZoomFormat.format(mScale)); 
    invalidate(); 

    mZoomController.setZoomInEnabled(mScale != MAX_ZOOM); 
    mZoomController.setZoomOutEnabled(mScale != MIN_ZOOM); 
} 

private void makeZoomLabel(Context context, ZoomButtonsController zoomController) { 
    ViewGroup container = zoomController.getContainer(); 
    View controls = zoomController.getZoomControls(); 
    LayoutParams p0 = controls.getLayoutParams(); 
    container.removeView(controls); 
    LinearLayout layout = new LinearLayout(context); 
    layout.setOrientation(LinearLayout.VERTICAL); 
    mZoomLabel = new TextView(context); 
    mZoomLabel.setPadding(12, 0, 12, 0); 
    mZoomLabel.setTypeface(Typeface.DEFAULT_BOLD); 
    mZoomLabel.setTextColor(0xff000000); 
    PaintDrawable d = new PaintDrawable(0xeeffffff); 
    d.setCornerRadius(6); 
    mZoomLabel.setBackgroundDrawable(d); 
    mZoomLabel.setTextSize(20); 
    mZoomLabel.setGravity(Gravity.CENTER_HORIZONTAL); 
    LinearLayout.LayoutParams p1 = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    p1.gravity = Gravity.CENTER_HORIZONTAL; 
    layout.addView(mZoomLabel, p1); 
    layout.addView(controls); 
    container.addView(layout, p0); 
} 

private Picture makeContent() { 
    Picture picture = new Picture(); 


    Canvas c = picture.beginRecording(WIDTH, HEIGHT); 

    //draw something 

    picture.endRecording(); 
    return picture; 
} 

}