Multi-Touch (MultiTouch) refers to a technique that allows a computer user to control a graphical interface through multiple fingers at the same time. and multi-touch technology is a single touch, single touch device has been for many years, small size of the touch-type mobile phone, the most common in large size is the bank ATM and queuing query machine and so on.Multi-touch technology in the actual development process, the most used is the amplification function. For example, there are some picture browsers, you can use more than one finger on the screen, the image to zoom in or zoom out. For example, some browsers can also zoom in or out of a font with multi-touch. In fact, zooming in and out is just one example of the practical application of multi-touch, with multi-touch technology, to a certain extent can innovate more ways to achieve more cool human-computer interaction. theoretically, the Android system itself can handle up to 256 finger touches, depending on the support of the phone hardware. Of course, phones that support multi-touch will not support so many points, generally supporting 2 or 4 points. For developers, there is no big difference between writing multi-touch code and writing a single-touch code. This is because the Motionevent class in the Android SDK not only encapsulates a single-touch message, but also encapsulates a multi-touch message, which is almost identical for single-touch and multi-touch processing. in dealing with a single touch, we typically use Motionevent.action_down, action_up, Action_move, and then we can use a switch statement to do the processing separately. Action_down and Action_up is a single touch screen, press down and release the operation, Action_move is the finger on the screen to move the operation. In the process of handling multi-touch, we also need to use the motionevent.action_mask. Typically, switch (Event.getaction () & Motionevent.action_mask) is used to handle Action_pointer_down and ACTION_POINTER_UP events that handle multi-touch. After the code calls this "and" operation, when the second finger is pressed or released, the Action_pointer_down or Action_pointer_up event is triggered. let's take a practical example to illustrate how to implement multi-touch functionality in your code. Here we load a picture, after loading the picture, you can drag the picture through a finger, you can also use two finger swipe to achieve the image zoom reduction function. View
<framelayout xmlns:android= "http://schemas.android.com/apk/res/android" xmlns:tools= "http// Schemas.android.com/tools "android:layout_width=" match_parent " android:layout_height=" Match_parent "Android: paddingleft= "@dimen/activity_horizontal_margin" android:paddingright= "@dimen/activity_horizontal_margin" android:paddingtop= "@dimen/activity_vertical_margin" android:paddingbottom= "@dimen/activity_vertical_ Margin "tools:context=". Mainactivity " android:id=" @+id/frame "> <imageview android:layout_width=" Wrap_content " android:layout_height= "Wrap_content" android:id= "@+id/img" android:background= "@drawable/paoku00199"/ ></FrameLayout>
Java
private float currentdistance=0; private float lastdistance=-1; Private Framelayout frame; @Override protected void OnCreate (Bundle savedinstancestate) {super.oncreate (savedinstancestate); Setcontentview (R.layout.activity_main); Frame= (framelayout) Findviewbyid (r.id.frame); Final ImageView img= (ImageView) Findviewbyid (r.id.img); Frame.setontouchlistener (New View.ontouchlistener () {@Override public boolean onTouch (View V, motio Nevent event) {switch (event.getaction ()) {case Motionevent.action_down://Touch Press LOG.I ("Motionevent", "Action_down"); Break } switch (Event.getaction ()) {case Motionevent.action_move://Touch move LOG.I ("Motionevent", "Action_move"); Framelayout.layoutparams layoutparams = (framelayout.layoutparams) img.getlayoutparams (); if (Event.getpointercount () ==1) {//single touch point, and drag picture Sy Stem.out.println (String.Format ("X:%f,y:%f", Event.getx (), Event.gety ())); Layoutparams.leftmargin = (int) event.getx ()-10; Layoutparams.topmargin = (int) event.gety ()-10; Img.setlayoutparams (Layoutparams); } System.out.println ("Number of pointer count touch points" +event.getpointercount ());//number of touch points Multiple touch point coordinates//gesture Zoom Out image if (Event.getpointercount () >=2) { System.out.println (String.Format ("Multi-touch point coordinates x1:%f; Y1:%f ", Event.getx (0), Event.getx (0)); Float offsetx=event.getx (0)-event.getx (1); 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) {//5px; error Framelayout.layoutparams LP = (framelayout.layoutparams) img.getlayoutparams (); SYSTEM.OUT.PRINTLN ("enlarge"); lp.width= (int) (1.1f*img.getwidth ()); lp.height= (int) (1.1f*img.getheight ()); IMG.SETLAYOUTPARAMS (LP); Lastdistance=currentdistance; Enlarge}else if (lastdistance-currentdistance>5) {Lastdis Tance=currentdistance; Narrow Framelayout.layoutparams LP = (framelayout.layoutparams) img.getlayoutparams (); lp.width= (int) (0.9f*img.getwidth ()); lp.height= (int) (0.9f*img.getheight ()); IMG.SETLAYOUTPARAMS (LP); }}} break; } switch (Event.getaction ()) {case MOTIONEVENT.ACTION_UP://Touch Bounce up LOG.I ("Motionevent", "action_up"); Break Return True;//true: Need to presses follow-up events; false: No subsequent events (only one execution)}) are required; }
Attention:
Private float currentdistance=0; private float lastdistance=-1;
To have the onclick written out;
Android Multi-Touch interactive processing, zooming in and out of pictures