SensorImageView随重力移动的ImageView
来源:互联网 发布:已备案域名 编辑:程序博客网 时间:2024/05/16 05:26
需要实现一个需求,实现类似于ios的随重力而移动的ImageView,要求较为简单:以宽度为基准,实现左右上下30dp范围内的随重力感应移动,图片高度如果小于控件高度,则上下不移动。
要实现这个功能,需要用到加速度传感器,实现思路为,在1-8的加速度范围(数值自己调节)内要让图片实现 0 至 图片宽度+60dp 的移动,高度同理
1.首先,要将自定义的ImageView的ScakeType强制设置为MATRIX。
@Override public void setScaleType(ScaleType scaleType) { super.setScaleType(ScaleType.MATRIX);//强制使用 MATRIX 模式 }
2.继承在setImageDrawable中,对drawable进行操作。
1)获取图片的真实宽高
imageWidth = drawable.getIntrinsicWidth();imageHeight = drawable.getIntrinsicHeight();
2)根据图片宽高,以及自己的需求,或得到缩放比例
,scaleX,scaleY。
3)对图片设置初始展示状态:
将图片默认居中显示
m.postScale(scaleX, scaleY);m.postTranslate(-DISTANCE, -distance_y - picDefaultMove);//居中显示
3.接下来,就要处理加速度传感器。
首先,应该在控件初始化的时候,对加速度感应器进行初始化,并添加监听,这里,我设置为100ms感应一次
if (null == sensorManager) { sensorManager = (SensorManager) getContext().getSystemService(Context.SENSOR_SERVICE); } //若传感器类型为加速度传感器(重力感应器) if (null == listener) { listener = new SensorEventListener() { @Override public void onSensorChanged(SensorEvent event) { //若传感器类型为加速度传感器(重力感应器) if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { //获取当前时刻的毫秒数 curTime = System.currentTimeMillis(); //100毫秒检测一次 long during = curTime - lastTime; if (during > 100 && !isSetImg) { float x = event.values[SensorManager.DATA_X]; float y = event.values[SensorManager.DATA_Y]; translatImg(x, y); lastTime = System.currentTimeMillis(); } } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } }; } defaultSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
4.对加速度的数值进行相应的图片移动,这里有个比较重要的地方是,图片移动要用属性动画来实现,这样会比较平滑。这部分代码就不贴了,这个很大程度由产品需求决定。
下载链接是这么放么。。
http://download.csdn.net/detail/zhuldu/9697160
0 0
- SensorImageView随重力移动的ImageView
- 可移动的ImageView
- 放大可以移动的ImageView
- 【Android】可移动的ImageView
- Android 移动缩放的ImageView
- 通过手势缩放、移动ImageView的图片
- 310_自由缩放移动的ImageView
- 移动ImageView,并且保存移动后的位置
- 03_Unity3D的输入(Input)——移动设备重力感应
- ImageView+Matrix移动问题
- 【cocos2d-x】重力感应----移动小球
- 重力操作图片移动(小程序)
- 【Unity&角色移动】代码控制重力
- 通过重力感应小球移动位置
- Unity--移动设备重力感应探悉
- [Android算法] Android 随手指移动的ImageView
- Android:手把手教你打造可缩放移动的ImageView
- 简单的重力
- 顺序表与链式表
- php银联网页支付实现方法
- HoughLinesP函数用法示例
- MyBatis 学习入门·基本配置·项目实例
- 基于模型融合的推荐系统实现(2):迭代式SVD分解
- SensorImageView随重力移动的ImageView
- 自定义View-Myview
- HoughCircles函数用法示例
- 霍夫线变换综合示例
- 内存(RAM或ROM)和FLASH存储的真正区别总结
- 多线程之生产者消费者
- Android开源项目推荐之「网络请求哪家强」
- [LeetCode]Surrounded Regions
- springmvc中上传下载解决乱码的问题