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();
}
}
效果如下: