开发者

Android: attempting to draw a canvas on a relative layout and eclipse wants to initialise a variable that shouldn't need it

开发者 https://www.devze.com 2023-02-20 12:47 出处:网络
Hello EclipeE wants to initialise: CustomDrawableView mCustomDrawableView; Any ideas? Cheers Phil Here\'s my code:

Hello EclipeE wants to initialise:

CustomDrawableView mCustomDrawableView;

Any ideas?

Cheers

Phil

Here's my code:

    package com.android.phil.graphtoggle;

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.OvalShape;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.ImageButton;
import android.widget.RelativeLayout;

public class MainActivity extends Activity 
{
    public int graph_toggle = 0;
    public int data_toggle=0;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        final ImageButton graph_toggle_button = (ImageButton) findViewById(R.id.graph_toggle);
        final ImageButton graph_settings_button = (ImageButton) findViewById(R.id.graph_type);
        final ImageButton data_toggle_button = (ImageButton) findViewById(R.id.data_toggle);

        CustomDrawableView mCustomDrawableView;

        RelativeLayout mainLayout = (RelativeLayout)findViewById(R开发者_JS百科.id.relativeLayout1);

        RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT,200);
        lp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);

        // add here other layout params rules to make your
        // custom view stay below the buttons

        mCustomDrawableView.setLayoutParams(lp);
        mainLayout.addView(mCustomDrawableView);

        graph_toggle_button.setOnClickListener(new View.OnClickListener() 
        {
            public void onClick(View arg0) 
            {
                if (graph_toggle==2)
                {
                    graph_toggle=0;
                }
                else
                {
                    graph_toggle++;
                }

                if (graph_toggle==0)
                {
                    graph_settings_button.setImageResource(R.drawable.close);
                }
                if (graph_toggle==1)
                {
                    graph_settings_button.setImageResource(R.drawable.ohlc_bars);
                }
                if(graph_toggle==2)
                {
                    graph_settings_button.setImageResource(R.drawable.candles);
                }               
            }         
        });
        data_toggle_button.setOnClickListener(new View.OnClickListener() 
        {
            public void onClick(View arg0) 
            {
                if (data_toggle==2)
                {
                    data_toggle=0;
                }
                else
                {
                    data_toggle++;
                }

                if (data_toggle==0)
                {
                    data_toggle_button.setImageResource(R.drawable.ohlc_bars_daily);
                }
                if (data_toggle==1)
                {
                    data_toggle_button.setImageResource(R.drawable.ohlc_bars_weekly);
                }
                if(data_toggle==2)
                {
                    data_toggle_button.setImageResource(R.drawable.ohlc_bars_monthly);
                }               
            }         
        });
    }
    public class CustomDrawableView extends View 
    {
        private ShapeDrawable mDrawable;

        public CustomDrawableView(Context context) 
        {
            super(context);

            int x = 10;
            int y = 100;
            int width = 300;
            int height = 50;

            mDrawable = new ShapeDrawable(new OvalShape());
            mDrawable.getPaint().setColor(0xff74AC23);
            mDrawable.setBounds(x, y, x + width, y + height);  
       }

        protected void onDraw(Canvas canvas)
        {
                mDrawable.draw(canvas);
        }
    }
}


You aren't initializing mCustomDrawableView anywhere so mCustomDrawableView.setLayoutParams(lp); is going to cause a NullPointerException.

You are missing something like

mCustomDrawableView = (CustomDrawableView) this.findViewById(R.id.my_custom_view);
0

精彩评论

暂无评论...
验证码 换一张
取 消