2011-03-28 35 views
0

我的问题可能很简单 - 有很多应用程序可以完成我所要做的事情。Android:绘制一个画布而不会遮住一排按钮

我有一排按钮的相对布局,然后在这之下我想画在画布上。

我的问题是,画布绘制按钮或代替按钮,所以我最终是一个形状。

这是我的代码:


    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.widget.ImageButton; 

    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; 

      mCustomDrawableView = new CustomDrawableView(this); 
      setContentView(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); 
      } 
     } 
    } 

这是我的xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
android:layout_width="fill_parent" 
android:id="@+id/relativeLayout1" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="fill_parent"> 
    <ImageButton 
    android:layout_height="40dip" 
    android:layout_width="40dip" 
    android:id="@+id/graph_toggle" 
    android:src="@drawable/graph_toggle" 
    android:layout_alignParentLeft="true" 
    ></ImageButton> 
    <ImageButton 
    android:layout_height="40dip" 
    android:layout_width="40dip" 
    android:id="@+id/graph_type" 
    android:src="@drawable/close" 
    android:layout_toRightOf="@+id/graph_toggle" 
    ></ImageButton> 
    <ImageButton 
    android:layout_height="40dip" 
    android:layout_width="40dip" 
    android:id="@+id/data_toggle" 
    android:src="@drawable/ohlc_bars_daily" 
    android:layout_toRightOf="@+id/graph_type" 
    ></ImageButton> 
    <ImageButton 
    android:layout_height="40dip" 
    android:layout_width="40dip" 
    android:id="@+id/data_toggle1" 
    android:src="@drawable/ohlc_bars_daily" 
    android:layout_toRightOf="@+id/data_toggle" 
    ></ImageButton> 
    <ImageButton 
    android:layout_height="40dip" 
    android:layout_width="40dip" 
    android:id="@+id/data_toggle2" 
    android:src="@drawable/ohlc_bars_daily" 
    android:layout_toRightOf="@+id/data_toggle1" 
    ></ImageButton> 
    <ImageButton 
    android:layout_height="40dip" 
    android:layout_width="40dip" 
    android:id="@+id/data_toggle3" 
    android:src="@drawable/ohlc_bars_daily" 
    android:layout_toRightOf="@+id/data_toggle2" 
    ></ImageButton> 
    <ImageButton 
    android:layout_height="40dip" 
    android:layout_width="40dip" 
    android:id="@+id/data_toggle4" 
    android:src="@drawable/ohlc_bars_daily" 
    android:layout_toRightOf="@+id/data_toggle3" 
    ></ImageButton> 
</RelativeLayout> 

+0

我的XML明显跑过来了。 – Phil 2011-03-28 12:40:02

回答

1

你与你的自定义视图替换你的整个XML布局,当你拨打:

setContentView(mCustomDrawableView); 

你应该自定义视图,而添加到布局,是这样的:

RelativeLayout mainLayout = (RelativeLayout)findViewById(R.id.relativeLayout1); 

RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(/*up to you*/); 
// add here other layout params rules to make your 
// custom view stay below the buttons 

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

但是你也应该考虑添加到您的自定义查看这种构造:

public CustomDrawableView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    // add other init stuff 
} 

,使您可以使用您的自定义视图到XML,使其更容易指定布局参数,可以因为...如果在代码中执行此操作,则可能无聊RelativeLayout

+0

它尝试了RelativeLayout位,但不知道如何将drawable应用到它。尽管如此,我仍然看到你的例子谢谢你的帮助。 – Phil 2011-03-28 13:28:56

+0

我试过这个,并且得到一个错误 mainLayout.add(mCustomDrawableView); 它想'添加投影到mainLayout' 任何想法? – Phil 2011-03-28 13:54:09

+0

@Phil哎呀,对不起,它是'addView(...)'。 – bigstones 2011-03-28 14:00:42

0

创建扩展了的FrameLayout类的类和覆盖OnDraw函数 那里,你可以画你想要的一切,它会表现得像其他任何视图