我的问题可能很简单 - 有许多应用程序可以完成我想要做的事情。
我有一个带有一排按钮的相对布局,然后在我想要在画布上画画。
我的问题是Canvas画了按钮而不是按钮,所以我最终得到的就是一个形状。
这是我的代码:
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 :(得分: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
无聊。
答案 1 :(得分:0)
创建一个扩展framelayout类的类并覆盖onDraw函数 在那里你可以绘制你想要的一切,它的行为就像任何其他视图一样