当前位置:首页 > 嵌入式 > 嵌入式软件
[导读] 一、概述ScaleGestureDetector这个类是专门用来检测两个手指在屏幕上做缩放的手势用的,最简单的应用就是用来缩放图片或者缩放网页。二、要求利用ScaleGestureDetector这个

 一、概述

ScaleGestureDetector这个类是专门用来检测两个手指在屏幕上做缩放的手势用的,最简单的应用就是用来缩放图片或者缩放网页。

二、要求

利用ScaleGestureDetector这个类实现图片缩放。

三、实现

新建工程MyScale,修改main.xml文件,在里面添加一个Button和一个SurfaceView,如下:

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

 

android:id="@+id/button"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="显示图片"

/>

 

android:id="@+id/surfaceview"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

/>

 

修改MyScaleActivity.java文件,主要是实现按钮的监听和定义一个类实现ScaleGestureDetector.OnScaleGestureListener接口:

package com.nan.scale;

import android.app.Activity;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Matrix;

import android.graphics.Rect;

import android.os.Bundle;

import android.view.MotionEvent;

import android.view.ScaleGestureDetector;

import android.view.SurfaceHolder;

import android.view.SurfaceView;

import android.view.View;

import android.widget.Button;

public class MyScaleActivity extends Activity

{

private Button mButton = null;

private SurfaceView mSurfaceView = null;

private SurfaceHolder mSurfaceHolder = null;

private ScaleGestureDetector mScaleGestureDetector = null;

private Bitmap mBitmap = null;

@Override

public void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

mSurfaceView = (SurfaceView)this.findViewById(R.id.surfaceview);

mSurfaceHolder = mSurfaceView.getHolder();

mScaleGestureDetector = new ScaleGestureDetector(this,new ScaleGestureListener());

mButton = (Button)this.findViewById(R.id.button);

//按钮监听

mButton.setOnClickListener(new View.OnClickListener()

{

@Override

public void onClick(View v)

{

// TODO Auto-generated method stub

mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.mmm);

//锁定整个SurfaceView

Canvas mCanvas = mSurfaceHolder.lockCanvas();

//画图

mCanvas.drawBitmap(mBitmap, 0f, 0f, null);

//绘制完成,提交修改

mSurfaceHolder.unlockCanvasAndPost(mCanvas);

//重新锁一次

mSurfaceHolder.lockCanvas(new Rect(0, 0, 0, 0));

mSurfaceHolder.unlockCanvasAndPost(mCanvas);

}

});

}

@Override

public boolean onTouchEvent(MotionEvent event)

{

//返回给ScaleGestureDetector来处理

return mScaleGestureDetector.onTouchEvent(event);

}

public class ScaleGestureListener implements ScaleGestureDetector.OnScaleGestureListener

{

@Override

public boolean onScale(ScaleGestureDetector detector)

{

// TODO Auto-generated method stub

Matrix mMatrix = new Matrix();

//缩放比例

float scale = detector.getScaleFactor()/3;

mMatrix.setScale(scale, scale);

//锁定整个SurfaceView

Canvas mCanvas = mSurfaceHolder.lockCanvas();

//清屏

mCanvas.drawColor(Color.BLACK);

//画缩放后的图

mCanvas.drawBitmap(mBitmap, mMatrix, null);

//绘制完成,提交修改

mSurfaceHolder.unlockCanvasAndPost(mCanvas);

//重新锁一次

mSurfaceHolder.lockCanvas(new Rect(0, 0, 0, 0));

mSurfaceHolder.unlockCanvasAndPost(mCanvas);

return false;

}

@Override

public boolean onScaleBegin(ScaleGestureDetector detector)

{

// TODO Auto-generated method stub

//一定要返回true才会进入onScale()这个函数

return true;

}

@Override

public void onScaleEnd(ScaleGestureDetector detector)

{

// TODO Auto-generated method stub

}

}

}

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

其他电脑(比如安卓手机/平板电脑)的屏幕坏了,你可能想在安排维修之前紧急访问一些东西。你可以使用android的USB OTG功能(是的,几乎每个android都支持这个功能,你可以将鼠标和键盘连接到它)。

关键字: USB 鼠标 Android 树莓派

北京 2025年6月11日 /美通社/ -- 近日,首届"凌海御空•舟山新篇"清华未来立体通行挑战赛总决赛在舟山群岛圆满落幕。智能算力服务商北京积算科技有限公司(以下简称"积算科技&quo...

关键字: 大赛 无人机 模型 应用开发

Google 宣布与中国 AR 科技公司 XREAL 达成深度战略合作,联合推出全球首款专为 Android XR 平台打造的旗舰级 AR 眼镜 Project Aura。

关键字: Google XREAL Android XR眼镜 AR

电力鸿蒙操作系统(OpenHarmony for Power)作为面向能源领域的专用物联操作系统,凭借其分布式架构、统一物联标准与安全可控特性,为电力行业智能化转型提供了底层支撑。本文从开发环境搭建、基础语法掌握到复杂应...

关键字: 电力鸿蒙 应用开发

继停止维护AOSP开源项目后,谷歌母公司Alphabet近日被曝在其安卓系统(Android)、Pixel手机以及Chrome浏览器等部门裁员数百人。这一举措引发了业界的广泛关注,也引发了对谷歌未来业务布局的诸多猜测。

关键字: 谷歌 AOSP Android 裁员

在本教程中,我们将使用Capacitor 6、Angular和TypeScript构建一个Android应用程序,该应用程序通过串行端口连接到BleuIO USB加密狗。该应用程序允许用户直接从Android设备发送和接...

关键字: Android USB 电容器 BLE设备

早前媒体报道谷歌将停止维护Android开源项目(AOSP),将Android开发全面转向内部闭源分支,目前这一消息已经得到谷歌官方确认。

关键字: 谷歌 Android 开源

本项目演示了如何通过OTG (on - go) USB在Android设备上使用BleuIO USB加密狗作为串行端口。使用电容器6和@adeunis/电容器-串行插件,我们建立串行连接,发送AT命令,并实时读取响应。该...

关键字: 电容器 Android 传感器 微控制器 嵌入式系统

北京2025年3月7日 /美通社/ -- 3月11日,浪潮信息将面向全国元脑生态伙伴举办"元脑企智DeepSeek一体机生态伙伴推介体验会"。活动现场,伙伴可深入了解元脑企智DeepSeek一体机的最...

关键字: EPS PSE 模型 应用开发
关闭