android中的多点触摸可以实现图片的放大、缩小和旋转等处理,供大家参考,具体内容如下
主要通过setontouchlistener方法来监听用户的触摸事件,通过event.getx(0)和 event.getx(1)来获取第一个触控点和第二个触控点的x轴(或者y轴)坐标,接下来在motionevent.action_down、motionevent.action_move、motionevent.action_up这几种情况中来对获取到的x轴或者y轴进行处理,就能实现我们想要的效果了。
下面这个小demo实现了对图片的放大和缩小处理:
package com.example.administrator.translation; import android.os.bundle; import android.support.v7.app.actionbaractivity; import android.view.menu; import android.view.menuitem; import android.view.motionevent; import android.view.view; import android.widget.imageview; import android.widget.relativelayout; public class mainactivity extends actionbaractivity { private relativelayout layout; private imageview iv; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); layout = (relativelayout) findviewbyid(r.id.layout); iv = (imageview) findviewbyid(r.id.iv); layout.setontouchlistener(new view.ontouchlistener() { float currentdistance; float lastdistance = -1; @override public boolean ontouch(view v, motionevent event) { switch (event.getaction()) { case motionevent.action_down: break; case motionevent.action_move: //判断几个触控点 if (event.getpointercount() >= 2) { //两点之间x的坐标差 float offsetx = event.getx(0) - event.getx(1); //两点之间y的坐标差 float offsety = event.gety(0) - event.gety(1); //两点之间的距离 currentdistance = (float) math.sqrt(offsetx * offsetx + offsety * offsety); if (lastdistance < 0) { //没有缩放 lastdistance = currentdistance; } else { if (currentdistance - lastdistance > 5) {//放大 relativelayout.layoutparams lp = (relativelayout.layoutparams) iv.getlayoutparams(); lp.width = (int) (1.1f * iv.getwidth()); lp.height = (int) (1.1f * iv.getheight()); iv.setlayoutparams(lp); lastdistance = currentdistance; } else if (currentdistance - lastdistance < -5) {//缩小 int currentivwidth = iv.getwidth(); int currentivheight = iv.getheight(); if (currentivwidth > 50 && currentivheight >50) { relativelayout.layoutparams lp = (relativelayout.layoutparams) iv.getlayoutparams(); lp.width = (int) (0.9f * iv.getwidth()); lp.height = (int) (0.9f * iv.getheight()); iv.setlayoutparams(lp); lastdistance = currentdistance; } } } } break; case motionevent.action_up: break; } return true; } }); } @override public boolean oncreateoptionsmenu(menu menu) { // inflate the menu; this adds items to the action bar if it is present. getmenuinflater().inflate(r.menu.menu_main, menu); return true; } @override public boolean onoptionsitemselected(menuitem item) { // handle action bar item clicks here. the action bar will // automatically handle clicks on the home/up button, so long // as you specify a parent activity in androidmanifest.xml. int id = item.getitemid(); //noinspection simplifiableifstatement if (id == r.id.action_settings) { return true; } return super.onoptionsitemselected(item); } }
xml代码:
<relativelayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/layout" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".mainactivity"> <imageview android:id="@+id/iv" android:layout_width="wrap_content" android:src="@mipmap/a" android:layout_height="wrap_content" /> </relativelayout>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。