我正在构建一个带有显示动画的屏幕(活动)的应用程序,以及一个应该显示动画选项的第二个屏幕。
我创建了自己的自定义View类(一个扩展View的类),它就在我放置onDraw方法和动画的类中。它工作得很好,我可以用手指拖过它来改变动画。我有方法可以改变动画的颜色和速度,我可以在的类中访问它们,但我不知道如何从其余部分访问它们应用
因此,在我的FractalView类(扩展View)中,我有一个changeColor方法。我想从设置活动屏幕访问该方法。但当我按下按钮进行颜色更改时,调用changeColor方法,我的应用程序会强行关闭。
我像这样访问View:
FractalView fractalView = (FractalView) findViewById(R.id.fractalViewCanvas);
fractalView.changeColor('G');
它没有给我任何错误,但是当我选择按钮时,它都会崩溃。
FractalDisplay活动屏幕加载FractalView视图就像加载按钮或TextView一样。所以FractalView类没有XML文件。
这是FractalView类中的方法:
public class FractalView extends View{
//variables... multiple constructors...
public FractalView(Context context, AttributeSet attrs) {
super(context, attrs);
thisContext = context;
initializeVariables();
//tonnes of methods... here's the one I want to access:
public void changeColor(char newColor){
switch(newColor) {
case 'G':
paint.setColor(Color.GREEN);
break;
default:
paint.setColor(Color.BLACK);
}
当然,我实际上无法访问此类中的任何方法。我尝了几个。
以下是XML文件DisplayFractal中的代码,它成功地将FractalView加载到其屏幕上:
<com.pattmayne.fractalapp.FractalView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:id="@+id/fractalViewCanvas" />
老实说,我不知道提供什么其他信息。这不是一个巨大的应用程序,我相信有一些方法可以做到这一点......看起来很简单。由于动画显示在屏幕上,因此从类中清楚地创建了一个对象。我只需要获取对该对象的引用,并从我想要的任何地方访问它的方法!
如果您需要,我会提供更多信息。
编辑:感谢您回复,伙计。
好的,这是崩溃信息:
10-05 22:14:35.650 14597-14597/com.pattmayne.fractalapp W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x41458450)
10-05 22:14:35.650 14597-14597/com.pattmayne.fractalapp E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.NullPointerException
at com.pattmayne.fractalapp.ChooseColorActivity$1.onItemClick(ChooseColorActivity.java:43)
at android.widget.AdapterView.performItemClick(AdapterView.java:298)
...
tem.NativeStart.main(Native Method)
所以我猜这是一个空指针异常,就像我引用一个类但没有对象。如何获取正在运行的对象?
编辑#2:
没有“onClick”。我在.java文件中这样做:(方法调用接近底部):
public class ChooseColorActivity extends ActionBarActivity {
FractalView fractalView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_choose_color);
String [] colors = {"Green", "Blue", "Red", "Black"};
ListAdapter theAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, colors);
ListView theListView = (ListView) findViewById(R.id.colorListView);
theListView.setAdapter(theAdapter);
theListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
String colorPicked = "You selected " + String.valueOf(adapterView.getItemAtPosition(position));
Toast.makeText(ChooseColorActivity.this, colorPicked, Toast.LENGTH_SHORT).show();
fractalView = (FractalView) findViewById(R.id.fractalViewCanvas);
fractalView.changeColor('G');
loadFractalView();
}
});
}
编辑#3:
哦,这是loadFractalView()方法(调用包含FractalView视图的活动:
public void loadFractalView() {
Intent getNameScreenIntent = new Intent(this, DisplayFractal.class);
final int result = 1;
startActivityForResult(getNameScreenIntent, result);
}