Android的数据存储与IO - 手势
关于手势的知识,我是第一次接触,是Android提供的另类的IO
可以进行手势检测、通过指定手势完成相应的动作、可以自行添加手势到手势库,也可以识别手势
下面是一个实例:通过手势缩放图片
创建项目:GestureZoom
运行项目效果如下:
Activity文件:GestureZoom
package wwj.gesturezoom;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.MotionEvent;
import android.widget.ImageView;
public class GestureZoom extends Activity implements OnGestureListener {
//定义手势检测器实例
GestureDetector detector;
ImageView imageView;
//初始图片资源
Bitmap bitmap;
//定义图片的宽、高
int width, height;
//记录当前的缩放比
float currentScale = 1;
//控制图片缩放的Matrix对象
Matrix matrix;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//创建手势检测器
detector = new GestureDetector(this);
imageView = (ImageView)findViewById(R.id.show);
matrix = new Matrix();
//获取被缩放的源图片
bitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.flower);
//获得位图宽
width = bitmap.getWidth();
//获得位图高
height = bitmap.getHeight();
//设置ImageView初始化时显示的图片
imageView.setImageBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.flower));
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
//将该Acitivity上触碰事件交给GestureDetector处理
return detector.onTouchEvent(event);
}
public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// TODO Auto-generated method stub
velocityX = velocityX > 4000 ? 4000 : velocityX;
velocityY = velocityY < -4000 ? -4000 : velocityY;
//根据手势的速度来计算缩放比,如果velocity > 0, 放大图像,否则缩小图像
currentScale += currentScale * velocityX / 4000.0f;
//保证currentScale不会等于0
currentScale = currentScale > 0.01 ? currentScale : 0.01f;
//重置Matrix
matrix.reset();
//缩放Matrix
matrix.setScale(currentScale, currentScale, 160, 200);
BitmapDrawable tmp = (BitmapDrawable) imageView.getDrawable();
//如果图片还未回收,先强制回收该图片
if(!tmp.getBitmap().isRecycled()){
tmp.getBitmap().recycle();
}
//根据原始位图和Matrix创建新图片
Bitmap bitmap2 = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
//显示新的位图
imageView.setImageBitmap(bitmap2);
return true;
}
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
}
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
// TODO Auto-generated method stub
return false;
}
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
}
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
}
分享到:
相关推荐
|--IO将输入流转成字节 |--Json读js资源文件 |--layout布局样式之style配置 |--listview 页面 图片加文字 |--ListView之CursorAdapter异步查询框架之短信 |--ListView之动态添加子view |--ListView优化之分页加载 |...
Android-RecyclerView-滑动手势1.简介易于使用的Android RecyclerView滑动手势实现。 支持任何RecyclerView的左右滑动将每个滑动方向的颜色设置为背景为每个滑动方向设置图标2.有计划的单击彩色按钮时,将仅执行...
第8章 Android的数据存储和IO 306 8.1 使用SharedPreferences 307 8.1.1 SharedPreferences与Editor 简介 307 8.1.2 SharedPreferences的存储 位置和格式 308 8.1.3 读、写其他应用Shared ...
CodeView Android代码突出显示工具安装将其添加到存储库末尾的root build.gradle中:allprojects {存储库{... maven {url“ https://jitpack.io”}}} CodeView Android代码突出显示安装将其添加到在存储库末尾的root...
第8章、Android的数据存储和IO 8.1、使用SharedPreferences:SharedPreferences; Editor; 8.2、File存储:openFileOutput和openFileInput; 读写SD卡文件; 8.3、SQLite数据库:SQL语句; SQLiteDatabase; ...
第8章、Android的数据存储和IO 8.1、使用SharedPreferences:SharedPreferences; Editor; 8.2、File存储:openFileOutput和openFileInput; 读写SD卡文件; 8.3、SQLite数据库:SQL语句; SQLiteDatabase; ...
将JitPack存储库添加到您的构建文件中: allprojects { repositories { .. . maven { url ' https://jitpack.io ' } } } 步骤2.添加依赖项 dependencies { implementation ' ...
第8章 Android的数据存储和IO 306 8.1 使用SharedPreferences 307 8.1.1 SharedPreferences与Editor 简介 307 8.1.2 SharedPreferences的存储 位置和格式 308 8.1.3 读、写其他应用Shared Preferences 310 8.2 File...
第8章 Android的数据存储和IO 306 8.1 使用SharedPreferences 307 8.1.1 SharedPreferences与Editor 简介 307 8.1.2 SharedPreferences的存储 位置和格式 308 8.1.3 读、写其他应用Shared Preferences 310 8.2 File...
无限卡 适用于Android的无限卡切换UI,支持自定义动画可自定义动效的卡片切换视图()颤振版本屏幕截图通过JitPack进行Gradle 将其添加到存储库末尾的root build.gradle中: allprojects {repositories {.....
与DrawerLayout手势相比,Overlapping Panels手势与Android 10的系统后向手势冲突的可能性要小得多,因为OverlappingPanelsLayout处理屏幕边缘上的整个布局,还可以处理滑动手势。在使用底部导航栏/选项卡作为主要...
2、Android 使用Vitamio打造自己的万能播放器(2)—— 手势控制亮度、音量、缩放 3、Android 使用Vitamio打造自己的万能播放器(3)——本地播放(主界面、播放列表) 正文 一、目标 1.1 A-
一个用于Android的简单手势检测库。 用途 步骤1.将JitPack存储库添加到您的构建文件中 将其添加到存储库末尾的root build.gradle中: allprojects{ repositories{ ... maven{ url 'https://jitpack.io'} } } ...
SwipeCoordinator SwipeCoordinator简化...设置添加到顶级gradle.build文件allprojects {存储库{maven {url“ https://jitpack.io”}}}添加到应用程序模块gradle.build文件依赖项{编译'com.github.VictorAlbertos:Swi
手势锁定视图由于Genymotion,帧卡住了,,,, wtf =。= 用法: 将JitPack存储库添加到您的构建文件中: repositories { // ... maven { url "https://jitpack.io" }}以以下形式添加依赖项: dependencies { ...
前言 本章将实现非常实用的功能——下载在线视频。涉及到多线程、线程更新UI等技术,还需思考产品的设计,如何将新加的功能更...4、Android 使用Vitamio打造自己的万能播放器(4)——本地播放(快捷搜索、数据存储)
前言 如果不想自己去找视频看,以传统方式看电视也不错,比如CCTV、湖南卫视等。...4、Android 使用Vitamio打造自己的万能播放器(4)——本地播放(快捷搜索、数据存储) 5、Android 使用Vitamio打造自己的