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>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。