Android系统。扩展FrameLayout。找不到属性xFraction异常的setter / getter

时间:2014-02-17 10:12:32

标签: android animation transitions android-framelayout

我扩展了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 - 我从那里得到了我的想法。但它不起作用。请帮帮我

2 个答案:

答案 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充气,即可让动画发挥作用。