2013-10-14 3 views
0

Я использовал relativelayout в своем xml для моего приложения для Android, но решил переключиться на framelayout, чтобы я мог сделать imageView ребенку другого изображения. Проблема в том, что, хотя игра работала до сих пор, теперь она сбой, так как я отредактировал свой xml как фреймэлей. Может ли кто-нибудь сказать, почему это сейчас сбой? Я уверен, что я использую что-то еще в определениях imageView, которых я не должен быть, но не могу понять, что это такое.Пытаясь создать xml framelayout, приложение android продолжает сбой

Вот мой XML-файл:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@layout/activity_main" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:background="@drawable/background" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context=".MainActivity" > 

<com.cannibal_photographer.Person 
    android:id="@+id/personView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="335dp" 
    android:src="@drawable/greensquare" /> 

<com.cannibal_photographer.Boat 
    android:id="@+id/boatimageView" 
    android:layout_width="78dp" 
    android:layout_height="130dp" 
    android:layout_marginLeft="105dp" 
    android:layout_marginTop="180dp" 
    android:src="@drawable/boat" /> 

</FrameLayout> 

Вот MainActivity:

package com.cannibal_photographer; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.Menu; 

public class MainActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main);  
    Boat boatobject = (Boat)findViewById(R.id.boatimageView); 
    Person personobject = (Person)findViewById(R.id.personView1); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

}

Вот класс Boat:

package com.cannibal_photographer; 

import android.content.Context; 
import android.util.AttributeSet; 
import android.view.View; 
import android.widget.ImageView; 

public class Boat extends ImageView { 

boolean state = true; 

public Boat(Context context) { 
    super(context); 
    init(); 
} 

public Boat(Context context, AttributeSet attrs) 
    { 
     super(context, attrs); 
     init(); 
    } 

public Boat(Context context, AttributeSet attrs, int defStyle) 
    { 
     super(context, attrs, defStyle); 
     init(); 
    } 

private void init() 
{ 
    this.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick (View v) { 
      if (state) { 
       moveBoat(-290); 
      } else { 
       moveBoat(290); 
      } 
     } 
    }); 
} 

//TranslateAnimation animation; 
//TranslateAnimation animation2; 

public void moveBoat(int amount){ 
    /* 
    animation = new TranslateAnimation(0, 0, 0, amount); 
    animation.setDuration(250); 
    animation.setFillAfter(true); 
    this.startAnimation(animation); 
    */ 
    this.offsetTopAndBottom(amount); 
    state = !state; 
} 
} 

Вот человек класс:

package com.cannibal_photographer; 

import android.content.Context; 
import android.util.AttributeSet; 
import android.view.View; 
import android.widget.ImageView; 

public class Person extends ImageView { 

boolean state = true; 

public Person(Context context) { 
    super(context); 
    init(); 
} 

public Person(Context context, AttributeSet attrs) 
    { 
     super(context, attrs); 
     init(); 
    } 

public Person(Context context, AttributeSet attrs, int defStyle) 
    { 
     super(context, attrs, defStyle); 
     init(); 
    } 

private void init() 
{ 
    this.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick (View v) { 
      if (state) { 
       movePerson(325,-230); 
      } else { 
       movePerson(-325,230); 
      } 
     } 
    }); 


} 

public void movePerson(int x, int y) 
{ 
    this.offsetLeftAndRight(x); 
    this.offsetTopAndBottom(y); 

    state = !state; 
} 

} 

Вот StackTrace:

10-14 23:10:10.985: E/AndroidRuntime(932): FATAL EXCEPTION: main 
10-14 23:10:10.985: E/AndroidRuntime(932): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.cannibal_photographer/com.cannibal_photographer.MainActivity}: java.lang.ClassCastException: com.cannibal_photographer.Person cannot be cast to com.cannibal_photographer.Boat 
10-14 23:10:10.985: E/AndroidRuntime(932): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
10-14 23:10:10.985: E/AndroidRuntime(932): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
10-14 23:10:10.985: E/AndroidRuntime(932): at android.app.ActivityThread.access$600(ActivityThread.java:141) 
10-14 23:10:10.985: E/AndroidRuntime(932): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
10-14 23:10:10.985: E/AndroidRuntime(932): at android.os.Handler.dispatchMessage(Handler.java:99) 
10-14 23:10:10.985: E/AndroidRuntime(932): at android.os.Looper.loop(Looper.java:137) 
10-14 23:10:10.985: E/AndroidRuntime(932): at android.app.ActivityThread.main(ActivityThread.java:5041) 
10-14 23:10:10.985: E/AndroidRuntime(932): at java.lang.reflect.Method.invokeNative(Native Method) 
+0

Вы показываете нам трассировку стека от logcat, мы расскажем вам, почему она рушится. Мы не можем догадываться. – Simon

+0

Хорошо, я добавил трассировку стека. – criscodisco

ответ

0

Этот вопрос

**java.lang.ClassCastException:** com.cannibal_photographer.Person cannot be cast to com.cannibal_photographer.Boat 10-14 23:10:10.985: E/AndroidRuntime(932): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)

Вы пытаетесь бросить объект Person на лодке. Проверьте код еще раз, правильно ли вы отображаете идентификаторы xml.

+0

Я снова проверил свой код, и похоже, что идентификаторы правильно отображаются. Я не вижу, как человека бросают на лодку куда угодно. Я обновил свой пост с остальной частью кода для того, над чем я работаю. – criscodisco

+0

Странно. Попробуйте очистить проект и повторите попытку. Иногда R-файл несовместим. – prijupaul

+0

Вау, это была проблема. Большое спасибо. – criscodisco

Смежные вопросы