自定义布局奇怪的行为

时间:2013-09-02 09:59:07

标签: android android-layout android-animation android-framelayout

我创建了一个包含多个视图的自定义framelayout。单击布局时,会在布局内完成一些动画。我在XML中创建了两个布局实例,如下所示:

<LinearLayout
    android:id="@+id/linearLayout1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:layout_marginTop="19dp"
    android:orientation="vertical" >

    <com.example.MyProj
        android:id="@+id/frame1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="19dp"
        android:layout_marginRight="28dp"
        android:clickable="true" >
    </com.example.MyProj>

    <com.example.MyProj
        android:id="@+id/frame2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:clickable="true" >
    </com.example.MyProj>
</LinearLayout>

现在奇怪的行为是,在我的主类中定义这些布局后,当我点击第一个布局时,动画发生在第二个布局上,即,当我点击第1帧时,第2帧是动画。单击时第二个布局响应正常。所以最新定义的布局是动画的。首先定义的布局没有动画。

Layouts in main xml

这就是我在主类中定义布局的方法:

    final MyProj fl = (MyProj) findViewById(R.id.frame1);
    final MyProj fl1 = (MyProj) findViewById(R.id.frame2);

    fl.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub

            fl.reset();
            fl.animation();
        }
    });

    fl1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub

            fl.reset();
            fl1.animation();
        }
    });

有人可以解释为什么这些布局会以这种方式表现吗? 提前谢谢。

2 个答案:

答案 0 :(得分:0)

在这里查看您的代码:

fl1.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub

        fl.reset();
        fl1.animation();
    }
});

它应该是:       fl1.setOnClickListener(new OnClickListener(){

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub

        fl1.reset();
        fl1.animation();
    }
});

答案 1 :(得分:0)

找到解决方案。将所有变量设置为静态会导致问题。将它们转换为私有可以解决问题。