SensorImageView随重力移动的ImageView

需要实现一个需求,实现类似于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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值