Android小應用----圖片的拖動、縮放

來源:互聯網
上載者:User

標籤:android   style   blog   class   code   c   

public class MainActivity extends Activity {private ImageView operImage;private PointF point = new PointF();//記錄手指的位置private PointF midPoint = new PointF();//記錄手指間的中點的位置private Matrix matrix = new Matrix();//記錄拖動和縮放前手指按下的matrixprivate Matrix newMatrix = new Matrix();//記錄手指正在拖動和縮放的matrixprivate int type = 0;//操作類型private float pointerDistance;//兩個手指的距離private static final int DRAG = 1;//拖動private static final int SCALE = 2;//縮放@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);operImage= (ImageView) findViewById(R.id.before);operImage.setOnTouchListener(new OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {int action = event.getAction()&MotionEvent.ACTION_MASK;switch (action) {case MotionEvent.ACTION_DOWN:float startX =  event.getX();float startY =  event.getY();//記錄手指的位置point.set(startX, startY);//得到當前圖片的位置matrix.set(operImage.getImageMatrix());type = DRAG;//拖動break;case MotionEvent.ACTION_POINTER_1_DOWN://記錄圖片沒有縮放前的大小matrix.set(operImage.getImageMatrix());//記錄兩個手指的距離pointerDistance = getDistance(event);//記錄兩個手指距離的中點midPoint= getMidPoint(event);type = SCALE;//縮放break;case MotionEvent.ACTION_MOVE:switch (type) {case DRAG://拖動float newX =  event.getX();float newY =  event.getY();newMatrix.set(matrix);float dx = newX - point.x;float dy = newY - point.y;newMatrix.postTranslate(dx, dy);break;case SCALE://縮放newMatrix.set(matrix);float nowDistance = getDistance(event);//根據此時的兩個手指間的距離除以開始的兩個手指間的距離計算縮放比float scale = nowDistance/pointerDistance;//根據中心點進行縮放newMatrix.postScale(scale, scale, midPoint.x, midPoint.y);break;default:break;}break;case MotionEvent.ACTION_UP:type = 0;break;case MotionEvent.ACTION_POINTER_1_UP:type = 0;break;}operImage.setImageMatrix(newMatrix);return true;}});}/* * 計算兩個手指的中點 */protected PointF getMidPoint(MotionEvent event) {float x = (event.getX(1) + event.getX(0))/2;float y = (event.getY(1) + event.getY(0))/2;return new PointF(x, y);}/* * 計算兩點間的距離 */protected float getDistance(MotionEvent event) {float x = event.getX(0) - event.getX(1);float y = event.getY(0) - event.getY(1);return FloatMath.sqrt(x*x + y*y);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.