ZoomRoll.java 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package com.poqop.document.views;
  2. import android.content.Context;
  3. import android.graphics.*;
  4. import android.view.MotionEvent;
  5. import android.view.VelocityTracker;
  6. import android.view.View;
  7. import android.view.ViewGroup;
  8. import android.widget.Scroller;
  9. import android.widget.Toast;
  10. import com.poqop.R;
  11. import com.poqop.document.models.ZoomModel;
  12. public class ZoomRoll extends View
  13. {
  14. private final Bitmap left;
  15. private final Bitmap right;
  16. private final Bitmap center;
  17. private final Bitmap serifs;
  18. private final Bitmap title;
  19. /**
  20. * VelocityTracker :是用来跟踪触摸速度的类
  21. *
  22. */
  23. private VelocityTracker velocityTracker;
  24. private Scroller scroller;
  25. private float lastX;
  26. private static final int MAX_VALUE = 1000;
  27. private final ZoomModel zoomModel;
  28. private static final float MULTIPLIER = 400.0f;
  29. private static final float MULTOP=10.0f;
  30. public ZoomRoll(Context context, ZoomModel zoomModel)
  31. {
  32. super(context);
  33. this.zoomModel = zoomModel;
  34. left = BitmapFactory.decodeResource(context.getResources(), R.drawable.left);
  35. right = BitmapFactory.decodeResource(context.getResources(), R.drawable.right);
  36. center = BitmapFactory.decodeResource(context.getResources(), R.drawable.center);
  37. serifs = BitmapFactory.decodeResource(context.getResources(), R.drawable.serifs);
  38. title = BitmapFactory.decodeResource(context.getResources(), R.drawable.zoomin);
  39. scroller = new Scroller(context);
  40. //设置子View的布局
  41. setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
  42. }
  43. /**
  44. * 测量。。
  45. * setMeasuredDimension(int width,int heith,)
  46. * 将被用来渲染组件.应当尽量在传递进来的width和height 声明之间.
  47. */
  48. @Override
  49. protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
  50. {
  51. setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), Math.max(left.getHeight(), right.getHeight()));
  52. }
  53. /*
  54. * 必要时由父控件调用请求或通知其一个子节点需要更新它的mScrollX和mScrollY的值。
  55. */
  56. @Override
  57. public void computeScroll()
  58. {
  59. if (scroller.computeScrollOffset())
  60. {
  61. setCurrentValue(scroller.getCurrX());
  62. invalidate();
  63. }
  64. else
  65. {
  66. zoomModel.commit();
  67. }
  68. }
  69. public float getCurrentValue()
  70. {
  71. return (zoomModel.getZoom() - 1.2f) * MULTIPLIER;
  72. }
  73. public void setCurrentValue(float currentValue)
  74. {
  75. if (currentValue < 0.0) currentValue = 0.0f;
  76. if (currentValue > MAX_VALUE) currentValue = MAX_VALUE;
  77. final float zoom = 1.0f + currentValue / MULTIPLIER;
  78. zoomModel.setZoom(zoom);
  79. }
  80. }