RelativeLayout可以通过onClick传递吗?

时间:2012-04-02 01:03:08

标签: android onclick relativelayout imagebutton

在尝试简化我正在开发的游戏的UI代码时,我发现尝试通过ImageButton的onClick()传递RelativeLayout非常值得。

我想知道这是否可行,因为只要点击ImageButton,它似乎就会强行关闭?这是我的代码一般的问题,还是不可能通过RelativeLayout的实际机制?

感谢高级, 这是我的代码:

public class SecondaryMenu extends Activity {

    ImageButton scrambledbutton; //Button That checks click and performs animation for the scrambled carton.
    ImageButton breakfastburritobutton; //Button for animation for breakfast burrito carton.
    ImageButton eggsbenedictbutton; //Button for eggs benedict carton animation.
    ImageButton eggsontoastbutton; //Button for eggs on toast animation
    ImageButton eggsaladsandwichbutton; //Button for egg salad sandwich animation.
    ImageButton eastereggsbutton; //Button for easter eggs animation.
    ImageButton ostricheggsbutton; //Button for ostrich eggs animation.
    ImageButton quaileggsbutton; //Button for quail eggs animation.
    RelativeLayout animatedcarton; //RelativeLayout for animating

    public void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.secondary_menu); //Sets the current layout to the Secondary_Menu layout


           //Does animation based on button press - SCRAMBLED
           scrambledbutton = (ImageButton) findViewById(R.id.scrambledbutton); 
           scrambledbutton.setOnClickListener(new View.OnClickListener() { 

                @Override
                public void onClick(View v) {               

                    //Calls the animation for the carton, and passes it the view to animate.
                    cartonanimation(findViewById (R.id.scrambledcarton));
                }
           });

           //Does animation based on button press - BREAKFAST BURRITO
           breakfastburritobutton = (ImageButton) findViewById (R.id.breakfastburritobutton);
           breakfastburritobutton.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {

                    //Calls animation and passes view to be animated.
                    cartonanimation(findViewById (R.id.breakfastburittocarton));                
                }
           });

    }

    //Animation that slides clicked carton off the screen
    private void cartonanimation(View tempview) {
        animatedcarton = (RelativeLayout) tempview;
        animatedcarton.setVisibility(RelativeLayout.VISIBLE);
        animatedcarton.setBackgroundResource(R.anim.secondarymenuanimation);
        AnimationDrawable viewAnimation = (AnimationDrawable) animatedcarton.getBackground();
        viewAnimation.start();
        viewAnimation.setOneShot(true);
    }
}

我的xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="320dp"
android:layout_height="wrap_content" 
android:gravity="top">

<!-- Carton number 1 - Scrambled -->
<RelativeLayout
  android:orientation="vertical"
  android:layout_width="320dp"
  android:layout_height="160dp" 
  android:gravity="top"
  android:id="@+id/scrambledcarton">
    <ImageButton 
        android:id="@+id/scrambledbutton" 
        android:background="@drawable/cartonbackground" 
        android:layout_centerVertical="true" 
        android:layout_centerHorizontal="true" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:layout_marginBottom="20dp">
    </ImageButton>
    <TextView 
        style="@style/cartondishstyle"
        android:text="@string/carton1"><!-- Change for each Carton -->
    </TextView>
    <TextView
        style="@style/cartoneggcountstyle" 
        android:text="18"
        android:layout_marginRight="40dp"><!-- Adjust for each Carton -->
    </TextView>
</RelativeLayout>

<!-- Carton number 2 - Breakfast Burrito -->
<RelativeLayout
  android:orientation="vertical"
  android:layout_width="320dp"
  android:layout_height="160dp" 
  android:gravity="top"
  android:id="@+id/breakfastburittocarton">
    <ImageButton 
        android:id="@+id/breakfastburritobutton" 
        android:background="@drawable/cartonbackground" 
        android:layout_centerVertical="true" 
        android:layout_centerHorizontal="true" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:layout_marginBottom="20dp">
    </ImageButton>
    <TextView 
        style="@style/cartondishstyle"
        android:text="@string/carton2"><!-- Change for each Carton -->
    </TextView>
    <TextView
        style="@style/cartoneggcountstyle" 
        android:text="18"
        android:layout_marginRight="40dp"><!-- Adjust for each Carton -->
    </TextView>
</RelativeLayout>

</LinearLayout>

和Log Cat

04-02 00:27:24.725: ERROR/AndroidRuntime(1674): FATAL EXCEPTION: main

04-02 00:27:24.725: ERROR/AndroidRuntime(1674): android.content.res.Resources$NotFoundException: File res/anim/secondarymenuanimation.xml from drawable resource ID #0x7f040000

04-02 00:27:24.725: ERROR/AndroidRuntime(1674):     at android.content.res.Resources.loadDrawable(Resources.java:1697)

04-02 00:27:24.725: ERROR/AndroidRuntime(1674):     at android.content.res.Resources.getDrawable(Resources.java:581)

04-02 00:27:24.725: ERROR/AndroidRuntime(1674):     at android.view.View.setBackgroundResource(View.java:7533)

04-02 00:27:24.725: ERROR/AndroidRuntime(1674):     at com.example.eggRoll.SecondaryMenu.cartonanimation(SecondaryMenu.java:54)

04-02 00:27:24.725: ERROR/AndroidRuntime(1674):     at com.example.eggRoll.SecondaryMenu.access$0(SecondaryMenu.java:51)

04-02 00:27:24.725: ERROR/AndroidRuntime(1674):     at com.example.eggRoll.SecondaryMenu$1.onClick(SecondaryMenu.java:35)

04-02 00:27:24.725: ERROR/AndroidRuntime(1674):     at android.view.View.performClick(View.java:2485)
04-02 00:27:24.725: ERROR/AndroidRuntime(1674):     at android.view.View$PerformClick.run(View.java:9080)

04-02 00:27:24.725: ERROR/AndroidRuntime(1674):     at android.os.Handler.handleCallback(Handler.java:587)

04-02 00:27:24.725: ERROR/AndroidRuntime(1674):     at android.os.Handler.dispatchMessage(Handler.java:92)

04-02 00:27:24.725: ERROR/AndroidRuntime(1674):     at android.os.Looper.loop(Looper.java:123)
04-02 00:27:24.725: ERROR/AndroidRuntime(1674):     at android.app.ActivityThread.main(ActivityThread.java:3683)

04-02 00:27:24.725: ERROR/AndroidRuntime(1674):     at java.lang.reflect.Method.invokeNative(Native Method)
04-02 00:27:24.725: ERROR/AndroidRuntime(1674):     at java.lang.reflect.Method.invoke(Method.java:507)

04-02 00:27:24.725: ERROR/AndroidRuntime(1674):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)

04-02 00:27:24.725: ERROR/AndroidRuntime(1674):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)

04-02 00:27:24.725: ERROR/AndroidRuntime(1674):     at dalvik.system.NativeStart.main(Native Method)
04-02 00:27:24.725: ERROR/AndroidRuntime(1674): Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #2: invalid drawable tag set

04-02 00:27:24.725: ERROR/AndroidRuntime(1674):     at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:783)

04-02 00:27:24.725: ERROR/AndroidRuntime(1674):     at android.graphics.drawable.Drawable.createFromXml(Drawable.java:728)

04-02 00:27:24.725: ERROR/AndroidRuntime(1674):     at android.content.res.Resources.loadDrawable(Resources.java:1694)

04-02 00:27:24.725: ERROR/AndroidRuntime(1674):     ... 16 more

1 个答案:

答案 0 :(得分:0)

您可能必须将viewAnimation.setOneShot(true);放在viewAnimation.start();之前,因为它会影响它的播放方式。