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