zoukankan      html  css  js  c++  java
  • android——单点触控移动,多点触控放大缩小

    xml

    复制代码
    <RelativeLayout 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"
        tools:context=".MainActivity" >
    
        <ImageView
            android:id="@+id/imgage"
            android:src="@drawable/test"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
           />
    
    </RelativeLayout>
    复制代码

    java

    复制代码
    package com.example.touchdemo;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.content.res.Resources;
    import android.util.DisplayMetrics;
    import android.util.Log;
    import android.view.Menu;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.View.OnTouchListener;
    import android.widget.ImageView;
    import android.widget.RelativeLayout;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
        private ImageView image;
        float lastDistance = -1;
        float x0 = 0;
        float y0 = 0;
         private int screenWidth; 
           private int screenHeight; 
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            image = (ImageView) findViewById(R.id.imgage);
            //获得屏幕宽高 不让出界
             DisplayMetrics dm = getResources().getDisplayMetrics(); 
                screenWidth = dm.widthPixels; 
                screenHeight = dm.heightPixels-100; 
    image.setOnTouchListener(new OnTouchListener() { private float x; private float y; @Override public boolean onTouch(View v,final MotionEvent event) { // TODO Auto-generated method stub int action = event.getAction(); Log.i("TAG","触摸开始......"); switch (action) { case MotionEvent.ACTION_DOWN: //getX()是表示Widget相对于自身左上角的x坐标,而getRawX()是表示相对于屏幕左上角的x坐标值(注意:这个屏幕左上角是手机屏幕左上角,不管activity是否有titleBar或是否全屏幕) x = event.getRawX(); y = event.getRawX(); break; case MotionEvent.ACTION_MOVE: //得到触摸点的个数 int count = event.getPointerCount(); Log.i("TAG","触摸点的个数:"+count); if(count > 1){ Log.i("TAG", event.getX(0)+","+event.getY(0)+"|"+event.getX(1)+","+event.getY(1)); //获得两点的坐标差 float distanceX = event.getX(0) - event.getX(1); float distanceY = event.getY(0) - event.getY(1); //获得两点之间的距离 float betweenDistance = (float) Math.sqrt(distanceX*distanceX + distanceY*distanceY); Log.i("TAG","当前两点之间的新距离:"+betweenDistance); if(betweenDistance < 1){ lastDistance = betweenDistance; }else if((betweenDistance - lastDistance) > 5){ //放大 lastDistance = betweenDistance; //获得布局参数 RelativeLayout.LayoutParams params = (android.widget.RelativeLayout.LayoutParams) image.getLayoutParams(); params.width = (int) (image.getWidth()*1.1f); params.height = (int) (image.getHeight()*1.1f); image.setLayoutParams(params); }else if((lastDistance - betweenDistance) > 5){ lastDistance = betweenDistance; //获得布局参数 RelativeLayout.LayoutParams params = (android.widget.RelativeLayout.LayoutParams) image.getLayoutParams(); params.width = (int) (image.getWidth()*0.9f); params.height = (int) (image.getHeight()*0.9f); image.setLayoutParams(params); } }else if(count == 1){ //移动距离 float rawX = event.getRawX()-x; float rawy = event.getRawY()-y; //定义新的 int left = (int) (image.getLeft()+rawX); int top = (int) (image.getTop()+rawy); int right = (int) (image.getRight()+rawX); int bottom = (int) (image.getBottom()+rawy); // 设置不能出界 if (left < 0) { left = 0; right = left + v.getWidth(); } if (right > screenWidth) { right = screenWidth; left = right - v.getWidth(); } if (top < 0) { top = 0; bottom = top + v.getHeight(); } if (bottom > screenHeight) { bottom = screenHeight; top = bottom - v.getHeight(); } //赋值 image.layout(left, top, right, bottom); //改成新的按下作标 x=event.getRawX(); y=event.getRawY(); /*return false;*/ } break; } return true; } }); } //全局移动 @Override public boolean onTouchEvent(MotionEvent event) { // TODO Auto-generated method stub /*image.setX(event.getX()); image.setY(event.getY()); */ return true; } }
    复制代码
  • 相关阅读:
    认识SQL
    Redis应用场景
    泛型
    数据库多表连接查询的实现方式
    Spring中常用注解及其作用
    flask-路转换器
    CSS初始化样式
    python 中的__str__ 和__repr__方法
    python的map、reduce和filter(过滤器)函数(廖雪峰老师python基础)
    python的迭代器(转自廖雪峰老师python基础)
  • 原文地址:https://www.cnblogs.com/wbp0818/p/5379856.html
Copyright © 2011-2022 走看看