1、具体实现

public class SubwayMapView extends View implements View.OnTouchListener,GestureDetector.OnGestureListener {    private Paint paint;    private float scale = 1f;    private float dx = 0 ,dy = 0;    private float mFirstX,mFirstY,mSecondX,mSecondY;    private int mOldCounts;    private GestureDetector mGestureDetector;    public SubwayMapView(Context context) {        super(context);        paint = new Paint();        mGestureDetector = new GestureDetector(this);    }    public SubwayMapView(Context context, AttributeSet attrs) {        super(context, attrs);        paint = new Paint();        mGestureDetector = new GestureDetector(this);    }    @Override    protected void onDraw(Canvas canvas) {        // TODO Auto-generated method stub        super.onDraw(canvas);        canvas.save();        canvas.scale(scale, scale);        canvas.translate(dx, dy);        paint.setColor(Color.BLUE);        canvas.drawCircle(200, 200, 100, paint);        canvas.restore();    }    @Override    public boolean onTouch(View v, MotionEvent event) {        switch (event.getAction()) {            case MotionEvent.ACTION_DOWN:                mOldCounts = 1;                mFirstX = event.getX();                mFirstY = event.getY();                break;            case MotionEvent.ACTION_MOVE: {                float fFirstX = event.getX();                float fFirstY = event.getY();                int nCounts = event.getPointerCount();                if (1 == nCounts) {                    mOldCounts = 1;                } else if (1 == mOldCounts) {                    mSecondX = event.getX(event.getPointerId(nCounts - 1));                    mSecondY = event.getY(event.getPointerId(nCounts - 1));                    mOldCounts = nCounts;                } else {                    float fSecondX = event                            .getX(event.getPointerId(nCounts - 1));                    float fSecondY = event                            .getY(event.getPointerId(nCounts - 1));                    double nLengthOld = getLength(mFirstX, mFirstY, mSecondX,                            mSecondY);                    double nLengthNow = getLength(fFirstX, fFirstY, fSecondX,                            fSecondY);                    float d = (float) ((nLengthNow - nLengthOld) / v.getWidth());                    scale += d;                    if(scale>3){                        scale=3f;                    }                    if(scale<0.5){                        scale=0.5f;                    }                    mSecondX = fSecondX;                    mSecondY = fSecondY;                }                mFirstX = fFirstX;                mFirstY = fFirstY;                break;            }        }        return mGestureDetector.onTouchEvent(event);    }    @Override    public boolean onDown(MotionEvent e) {        return true;    }    @Override    public void onShowPress(MotionEvent e) {    }    @Override    public boolean onSingleTapUp(MotionEvent e) {        return true;    }    @Override    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {        this.dx = this.dx - (e1.getX()-e2.getX())/50;        this.dy = this.dy - (e1.getY()-e2.getY())/50;        invalidate();        return true;    }    @Override    public void onLongPress(MotionEvent e) {    }    @Override    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {        return true;    }    private double getLength(float x1, float y1, float x2, float y2) {        return Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2));    }}

2、使用方法
①在xml布局文件引用SubwayMapView

private SubwayMapView map;map = (SubwayMapView)findViewById(R.id.map);map.setOnTouchListener(map);

更多相关文章

  1. Android Layout Tricks #3: Optimize with stubs(Android 布局技
  2. Android 关于显示键盘,布局错乱网上顶的问题
  3. Android下按扭的使用方法
  4. android 开发 简单的页面布局
  5. RecyclerView竖直和水平的瀑布流布局
  6. Android适配底部虚拟键盘遮挡布局的解决方案
  7. Android参数设置父布局集体宽高

随机推荐

  1. 转android123 预防Android内存泄露
  2. android 屏幕适配的总结,适合面试
  3. android 线程间的通信
  4. Android入门教程2【开发环境搭建】
  5. android 生成xml文件
  6. 神们自己
  7. 打造Android(安卓)MVP模式 retrofit+rxja
  8. android 镜像制作方法
  9. AIDL使用学习(一):基础使用学习
  10. Android(安卓)下载Zip文件,并解压到本地,