我扩展了FrameLayout类,用于在片段转换时制作滑入式幻灯片动画。我想以编程方式获取xFraction值。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ImageView
android:layout_width="70dp"
android:layout_height="70dp"
android:layout_centerHorizontal="true"
android:layout_marginTop="15dp"
android:src="@+drawable/logo" />
<com.example.helpers.CustomFrameLayout
android:id="@+id/fragment"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
</RelativeLayout>
CustomFrameLayout看起来像
public class CustomFrameLayout extends FrameLayout {
public CustomFrameLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}
public CustomFrameLayout(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public CustomFrameLayout(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public float getXFraction() {
return getX() / getWidth();
}
public void setXFraction(float xFraction) {
final int width = getWidth();
setX((width > 0) ? (xFraction * width) : -9999);
}
}
点击按钮后动画启动时抛出异常:
Can't find native method using JNI, use reflectionjava.lang.NoSuchMethodError: no method with name='setXFraction' signature='(F)V' in class Landroid/widget/RelativeLayout;
02-17 13:57:33.369: E/PropertyValuesHolder(12223): Couldn't find setter/getter for property xFraction with value type float
Animate the transition between fragments - 我从那里得到了我的想法。但它不起作用。请帮帮我
答案 0 :(得分:0)
您似乎正在尝试在父RelativeLayout
上调用方法:setXFraction()而不是com.example.helpers.CustomFrameLayout
。
您应该像这样引用CustomFrameLayout
(假设您已经引用了名为parentRelativeLayout
的父布局):
CustomFrameLayout customFrameLayout = (CustomFrameLayout) parentRelativeLayout.findViewById(R.id.fragment);
现在你可以在适当的引用上调用setXFraction()
,例如:
customFrameLayout.setXFraction(25.4);
答案 1 :(得分:0)
无论你想要制作什么样的动画,都应该使用setXFraction方法。
如果要对整个xml进行充气,它会检查相对布局中的setXFraction。
我猜getNativeLoginFr会给你的观点,它会让整个xml膨胀..
您只需要使FrameLayout充气,即可让动画发挥作用。