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读取网络图片
  2. Android实现网络音乐播放器
  3. android 调用系统自带录音实现,语音录制与播放
  4. Android(安卓)监听WiFi的开关状态实现代码
  5. Android(安卓)实现短信的备份恢复
  6. android实现圆形头像
  7. android实现双击事件的监听
  8. Android下按扭的使用方法
  9. 浅谈Java中Collections.sort对List排序的两种方法

随机推荐

  1. Android(安卓)平台下使用 i2c-tools
  2. ArcGIS for Android(安卓)离线数据编辑原
  3. Android(安卓)bitmap 图片缩放,压缩处理
  4. Android获取应用运行次数
  5. HockeyApp环境搭建
  6. [置顶] 第8章android动态调试
  7. Intellij Idea12 旗舰版 安卓(Android)
  8. Android(安卓)更新UI的两种方法——handl
  9. 【Android】新浪微博开放平台V2开发入门
  10. 小记 ScrollView 隐藏 里面空间填充后再