package cn.androidy.thinking.views; import android.graphics.Canvas; import android.graphics.Paint; import java.util.ArrayList; import java.util.List; /** * Created by Rick Meng on 2015/6/23. */ public class PickerLayerManager { private List<PickerLayer> mPickerLayerList = new ArrayList<PickerLayer>(); private int mWidth; private int mHeight; private float density = 1.0f; private int itemHeight; private int selectedPosition = 0; //初始化绑定数据 public PickerLayerManager(float density) { this.density = density; } public void bindData(List<Object> dataList) { mPickerLayerList.clear(); for (Object o : dataList) { mPickerLayerList.add(new PickerLayer(o, density)); } } //初始化画布的整体宽高 public void initCanvasTotalArea(int width, int height) { mWidth = width; mHeight = height; } //初始化各个Layer的初始位置 public void initLayerParams(Paint paint, float transY) { int i = 0; for (PickerLayer layer : mPickerLayerList) { layer.initIndex(i++, mWidth, mHeight, paint, transY); } } public void doDraw(Canvas canvas, Paint paint) { for (PickerLayer layer : mPickerLayerList) { layer.doDraw(canvas, paint, findSelectedLayer()); } } //根据距离中线的最小距离确定当前选中的item,确保同一时间只有一个item被选中。 private PickerLayer findSelectedLayer() { float minDistance = mHeight; for (int i = 0; i < mPickerLayerList.size(); i++) { PickerLayer layer = mPickerLayerList.get(i); float distance = Math.abs(layer.canvasHeight / 2 - layer.baseline); if (distance < minDistance) { minDistance = distance; selectedPosition = i; itemHeight = mPickerLayerList.get(selectedPosition).getItemHeight(); } } return mPickerLayerList.get(selectedPosition); } public int getItemHeight() { return itemHeight; } public int getSelectedIndex() { return selectedPosition; } }