2015-07-22 38 views
0

我想放大水平滚动视图的内容。我创建了一个自定义类和处理事件的变焦下面是我的代码:放大水平滚动视图不工作在android

public class LockableScrollView extends HorizontalScrollView { 

    private GestureDetector mGestureDetector; 
    //private onDis mListener; 
    Context context; 

    public LockableScrollView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     // TODO Auto-generated constructor stub 
     this.context = context; 
    } 

    // true if we can scroll the ScrollView 
    // false if we cannot scroll 
    private boolean scrollable = true; 

    /** 
    * This method used for setScrolling to ScrollView 
    * 
    * @param is 
    *   True in onInterceptTouchEvent returns true else false 
    * 
    * */ 
    public void setScrollingEnabled(boolean scrollable) { 
     this.scrollable = scrollable; 
    } 

    /** 
    * Check is scrollview isScrollable or not 
    * */ 
    public boolean isScrollable() { 
     return scrollable; 
    } 

    @Override 
    public boolean dispatchTouchEvent(MotionEvent ev) { 
     // 
     switch (ev.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      // if we can scroll pass the event to the superclass 
      if (scrollable) 
       return super.onTouchEvent(ev); 
      // only continue to handle the touch event if scrolling enabled 
      return scrollable; 
      // scrollable is always false at this point 
     default: 
      return super.onTouchEvent(ev); 
     } 
    } 

    @Override 
    public boolean onInterceptTouchEvent(MotionEvent ev) { 
     // Don't do anything with intercepted touch events if 
     // we are not scrollable 
     switch (ev.getAction()) { 
     case MotionEvent.ACTION_MOVE: 
      if (scrollable) { 
       // We're currently scrolling, so yes, intercept the 
       // touch event! 
       return super.dispatchTouchEvent(ev); 
      } 


     } 
     return false; 

    } 
} 

和活动:

in oncreate 
gestureDetector = new GestureDetector(FullImageView.this.getActivity(), new GestureListener()); 

     // animation for scalling 
     mScaleDetector = new ScaleGestureDetector(FullImageView.this.getActivity(), new ScaleGestureDetector.SimpleOnScaleGestureListener() 
     {         
      @Override 
      public boolean onScale(ScaleGestureDetector detector) 
      { 
       float scale = 1 - detector.getScaleFactor(); 

       float prevScale = mScale; 
       mScale += scale; 

       if (mScale < 0.1f) // Minimum scale condition: 
        mScale = 0.1f; 

       if (mScale > 10f) // Maximum scale condition: 
        mScale = 10f; 
       ScaleAnimation scaleAnimation = new ScaleAnimation(1f/prevScale, 1f/mScale, 1f/prevScale, 1f/mScale, detector.getFocusX(), detector.getFocusY()); 
       scaleAnimation.setDuration(0); 
       scaleAnimation.setFillAfter(true); 
       //ScrollView layout =(ScrollView) findViewById(R.id.horizontalScrollView1); 
       scrollView.startAnimation(scaleAnimation); 
       return true; 
      } 
     }); 
     //zoom(4f,4f,new PointF(0,0)); 
     //scrollView.setOnTouchListener(new MyScaleGestures(FullImageView.this.getActivity())); 
     //scrollView.requestDisallowInterceptTouchEvent(true); 
     scrollView.setOnTouchListener(new OnTouchListener() { 

      @Override 
      public boolean onTouch(View arg0, MotionEvent event) { 
       // TODO Auto-generated method stub 
       mScaleDetector.onTouchEvent(event); 
       gestureDetector.onTouchEvent(event); 
       return gestureDetector.onTouchEvent(event); 
      } 
     }); 

    } 


    private class GestureListener extends GestureDetector.SimpleOnGestureListener { 
     @Override 
     public boolean onDown(MotionEvent e) { 
      return true; 
     } 
     // event when double tap occurs 
     @Override 
     public boolean onDoubleTap(MotionEvent e) { 
      // double tap fired. 
      return true; 
     } 
    } 

,但我无法得到放大,请帮助。

+0

你想放大的图像或文本? – Anjali

回答