1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- package com.poqop.document.views;
- import android.content.Context;
- import android.graphics.*;
- import android.view.MotionEvent;
- import android.view.VelocityTracker;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.Scroller;
- import android.widget.Toast;
- import com.poqop.R;
- import com.poqop.document.models.ZoomModel;
- public class ZoomRoll extends View
- {
- private final Bitmap left;
- private final Bitmap right;
- private final Bitmap center;
- private final Bitmap serifs;
- private final Bitmap title;
- /**
- * VelocityTracker :是用来跟踪触摸速度的类
- *
- */
- private VelocityTracker velocityTracker;
- private Scroller scroller;
- private float lastX;
- private static final int MAX_VALUE = 1000;
- private final ZoomModel zoomModel;
- private static final float MULTIPLIER = 400.0f;
- private static final float MULTOP=10.0f;
-
- public ZoomRoll(Context context, ZoomModel zoomModel)
- {
- super(context);
- this.zoomModel = zoomModel;
- left = BitmapFactory.decodeResource(context.getResources(), R.drawable.left);
- right = BitmapFactory.decodeResource(context.getResources(), R.drawable.right);
- center = BitmapFactory.decodeResource(context.getResources(), R.drawable.center);
- serifs = BitmapFactory.decodeResource(context.getResources(), R.drawable.serifs);
-
- title = BitmapFactory.decodeResource(context.getResources(), R.drawable.zoomin);
-
- scroller = new Scroller(context);
-
- //设置子View的布局
- setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
- }
-
-
- /**
- * 测量。。
- * setMeasuredDimension(int width,int heith,)
- * 将被用来渲染组件.应当尽量在传递进来的width和height 声明之间.
- */
- @Override
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
- {
- setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), Math.max(left.getHeight(), right.getHeight()));
- }
- /*
- * 必要时由父控件调用请求或通知其一个子节点需要更新它的mScrollX和mScrollY的值。
- */
- @Override
- public void computeScroll()
- {
- if (scroller.computeScrollOffset())
- {
- setCurrentValue(scroller.getCurrX());
- invalidate();
- }
- else
- {
- zoomModel.commit();
- }
- }
- public float getCurrentValue()
- {
- return (zoomModel.getZoom() - 1.2f) * MULTIPLIER;
- }
- public void setCurrentValue(float currentValue)
- {
- if (currentValue < 0.0) currentValue = 0.0f;
- if (currentValue > MAX_VALUE) currentValue = MAX_VALUE;
- final float zoom = 1.0f + currentValue / MULTIPLIER;
- zoomModel.setZoom(zoom);
- }
- }
|