Android.传感器之指南针效果实现

布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <com.cn.monthtext_lx.drawzinanzheng
        android:id="@+id/zdy_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</android.support.constraint.ConstraintLayout>

核心代码: 

public class Thing_six extends Fragment {
    @BindView(R.id.zdy_view)
    drawzinanzheng zdyView;
    Unbinder unbinder;
    //刚开是的度数:
    float start=0f;
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.thing_6, null);
        unbinder = ButterKnife.bind(this, view);

        //获取服务:
        SensorManager manager= (SensorManager) getActivity().getSystemService(Context.SENSOR_SERVICE);

        //方向传感器:
        Sensor defaultSensor = manager.getDefaultSensor(Sensor.TYPE_ORIENTATION);

        //传感器监听器:
        SensorEventListener sensorEventListener=new SensorEventListener() {
            @Override
            public void onSensorChanged(SensorEvent event) {
                float values[]=event.values;
                //获取当前的旋转的度数:
                float now=values[0];

                RotateAnimation rotateAnimation=new RotateAnimation(start,now,
                        Animation.RELATIVE_TO_SELF,0.5f, Animation.RELATIVE_TO_SELF,0.5f
                        );
                rotateAnimation.setDuration(200);
                rotateAnimation.setFillAfter(true);
                zdyView.startAnimation(rotateAnimation);
                //保持当前旋转的度数:
                start=-now;
            }

            @Override
            public void onAccuracyChanged(Sensor sensor, int accuracy) {

            }
        };

        manager.registerListener(sensorEventListener,defaultSensor,SensorManager.SENSOR_DELAY_GAME);
        return view;
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        unbinder.unbind();
    }
}

效果如下:

猜你喜欢

转载自blog.csdn.net/LoverLeslie/article/details/82893926