用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - android代码库

多点触控缩放图片

2016-12-31 作者: cwm1996举报

[android]代码库

package com.multitouch;
 
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.RelativeLayout.LayoutParams;
 
/**
 * 多点触控Demo实例: 图片的缩放。
 *
 */
public class MainActivity extends Activity {
    private RelativeLayout layout;
    protected String TAG = "zhongyao";
    private ImageView imageView;
    private float currentDistance;
    private float lastDistance = -1;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        layout = (RelativeLayout) findViewById(R.id.layout);
        imageView = (ImageView) findViewById(R.id.imageView);
 
        layout.setOnTouchListener(new OnTouchListener() {
 
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                    /**
                     * 手指按下
                     */
                case MotionEvent.ACTION_DOWN:
                    Log.d(TAG, "down!!!");
                    break;
                /**
                 * 手指移动
                 */
                case MotionEvent.ACTION_MOVE:
                    Log.d(TAG, "move!!!");
                    /**
                     * 首先判断按下手指的个数是不是大于两个。
                     * 如果大于两个则执行以下操作(即图片的缩放操作)。
                     */
                    if (event.getPointerCount() >= 2) {
 
                        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 {
                                /**
                                 * 如果当前滑动的距离(currentDistance)比最后一次记录的距离(lastDistance)相比大于5英寸(也可以为其他尺寸),
                                 * 那么现实图片放大
                                 */
                            if (currentDistance - lastDistance > 5) {
                                Log.d(TAG, "放大!!!");
                                RelativeLayout.LayoutParams lp = (LayoutParams) imageView
                                        .getLayoutParams();
                                /**
                                 * 图片宽高一次放大为原来图片的1.1倍(当然,也可以为其他数值)。
                                 */
                                lp.width = (int) (imageView.getWidth() * 1.1);
                                lp.height = (int) (imageView.getHeight() * 1.1);
                                imageView.setLayoutParams(lp);
                                lastDistance = currentDistance;
                                /**
                                 * 如果最后的一次记录的距离(lastDistance)与当前的滑动距离(currentDistance)相比小于5英寸,
                                 * 那么图片缩小。
                                 */
                            } else if (lastDistance - currentDistance > 5) {
                                Log.d(TAG, "缩小!!!");
                                RelativeLayout.LayoutParams lp = (LayoutParams) imageView
                                        .getLayoutParams();
                                /**
                                 * 图片宽高一次缩小为原来图片的0.9倍。
                                 */
                                lp.width = (int) (imageView.getWidth() * 0.9);
                                lp.height = (int) (imageView.getHeight() * 0.9);
                                imageView.setLayoutParams(lp);
                                lastDistance = currentDistance;
                            }
                        }
                    }
                    break;
                /**
                 * 手指抬起
                 */
                case MotionEvent.ACTION_UP:
                    Log.d(TAG, "up!!!");
                    break;
                }
                return true;
            }
        });
    }
 
}


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...