PhysicsLayout

介绍:

使用物理引擎JBox2D模拟物理世界的布局。

运行效果:

使用说明:

Gradle 依赖 (jCenter)

build.gradle:

dependencies {
    compile 'com.jawnnypoo:physicslayout:1.0.0'
}

直接把根布局替换成physics layout。

  <com.jawnnypoo.physicslayout.PhysicsLinearLayout
    android:id="@+id/physics_layout"
    android:layout_width="match_parent"
    android:layout_height="200dp">
      <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher"/>
      <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher"/>
      <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello world, I have physics!"/>
  </com.jawnnypoo.physicslayout.PhysicsLinearLayout>

自定义 XML 属性

你也可以进一步自定义PhysicsLayout的行为

  <com.jawnnypoo.physicslayout.PhysicsLinearLayout
    android:id="@+id/physics_layout"
    android:layout_width="match_parent"
    android:layout_height="200dp"
    app:physics="true"
    app:gravityX="0.0"
    app:gravityY="9.8"
    app:bounds="true"/>
  • physics 布尔类型, 决定是否对该布局采用物理动画(默认为true)

  • gravityX 浮点, 设置X方向上的gravity(右边为正,左边为负,默认为0)

  • gravityY 浮点, 设置Y方向上的gravity (下正 , 上负 ,默认9.8)

  • bounds 布尔, 决定布局边界是否有跳跃效果(默认为true)

自定义物理配置

布局中的每一个View都有一个物理配置,用于在Box2D世界中创建自己。它定义形状,质量,坚固系数。也可以使用PhysicsConfiguration builder来为每个view设置一个自定义的配置:

final View circleView = findViewById(R.id.circle);
PhysicsConfig config = new PhysicsConfig.Builder()
                .setShapeType(PhysicsConfig.ShapeType.CIRCLE)
                .setRadius(100)
                .setAllowRotation(true)
                .setBodyDefType(BodyType.STATIC)
                .setDensity(1.0f)
                .setFriction(1.0f)
                .setRestitution(1.0f)
                .build();
physicsLayout.getPhysics().setPhysicsConfig(circleView, config);

如果你想要一个圆形的view,这非常有用,因为默认所有view都是矩形的。多数情况下你都是处理矩形view,默认的已经能满足。

更多的实际操作查看sample app。

已下载
0