基于重力传感器值为流体视图设置动画

时间:2017-07-02 23:05:41

标签: android android-layout animation android-sensors

我想根据重力传感器值旋转视图,如下所示:

example gif

Java活动文件中的重力感应侦听器:

@Override
protected void onResume() {
    super.onResume();
    mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY), SensorManager.SENSOR_DELAY_UI);
}

public void onSensorChanged(SensorEvent event) {
    float x = event.values[0];
    float y = event.values[1];
    float z = event.values[2];
    ImageView fluid = (ImageView) findViewById(R.id.fluid);
    fluid.setRotation((float) Math.toDegrees(acos(y / 9.8)));
    if (x < 0) {
        fluid.setRotation(fluid.getRotation() * -1);
    }
}

我的XML活动文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/ll"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clipChildren="false"
    android:clipToPadding="false"
    android:orientation="vertical"
    tools:context="com.patmyron.blackbox.Puzzle1Activity">

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="75dp"
        android:layout_height="75dp"
        android:layout_alignParentEnd="true"
        android:layout_alignTop="@+id/imageView2"
        android:layout_gravity="center"
        android:background="@drawable/blink00" />

    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="75dp"
        android:layout_height="75dp"
        android:layout_alignParentStart="true"
        android:layout_centerVertical="true"
        android:layout_gravity="center"
        android:background="@drawable/blink00" />

    <ImageView
        android:id="@+id/imageView3"
        android:layout_width="75dp"
        android:layout_height="75dp"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_gravity="center"
        android:adjustViewBounds="false"
        android:background="@drawable/blink00"
        android:cropToPadding="false" />

    <ImageView
        android:id="@+id/imageView4"
        android:layout_width="75dp"
        android:layout_height="75dp"
        android:layout_alignParentBottom="true"
        android:layout_alignStart="@+id/imageView3"
        android:layout_gravity="center"
        android:background="@drawable/blink00" />

    <ImageView
        android:id="@+id/imageView5"
        android:layout_width="75dp"
        android:layout_height="75dp"
        android:layout_above="@+id/imageView2"
        android:layout_alignStart="@+id/imageView4"
        android:layout_gravity="center"
        android:background="@drawable/blink00" />

    <ImageView
        android:id="@+id/imageView6"
        android:layout_width="75dp"
        android:layout_height="75dp"
        android:layout_alignStart="@+id/imageView4"
        android:layout_below="@+id/imageView2"
        android:layout_gravity="center"
        android:background="@drawable/blink00" />

    <ImageView
        android:id="@+id/fluid"
        android:rotation="0"
        android:layout_width="1000000dp"
        android:layout_marginTop="350dp"
        android:layout_height="1000000dp"
        android:background="#99DE083B" />
</RelativeLayout>

目前看起来像这样:

view of activity gif

将宽度和高度设置为1000000dp似乎不起作用,因为屏幕边界限制了初始启动时的大小,但是当倾斜时,您可以看到空白区域,因为矩形不再大到足以覆盖整个空间。 ..

0 个答案:

没有答案