如何在布局上绘制动态绘图

时间:2011-03-11 19:25:14

标签: android

我正在尝试制作温度计。为此,我有一个我插入的温度计(png文件)的图像 使用ImageView进入布局。现在我想在此图像上画一条线来显示温度读数的影响。

这是我的代码。

main.xml中

<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<ImageView 
</ImageView>
<com.focusone.Android.DrawExample.CustomDrawableView    
    android:id="@+id/custom_drawable_view"   
     android:layout_width="fill_parent"          
    android:layout_height="wrap_content" 
    height='100'
    /> 
</AbsoluteLayout>

DrawExample.java

package com.focusone.Android.DrawExample;

public class DrawExample extends Activity {
    /** Called when the activity is first created. */

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

    }

}

CustomDrawableView.java

public class CustomDrawableView extends View {
    private ShapeDrawable mDrawable;

    public CustomDrawableView(Context v,AttributeSet as){ 
        super(v,as); 
        drawShape(as); 
    } 
    public void drawShape(AttributeSet ast) {

        int x =45; int y=15 ; int width=5; int height=0 ;
                    height= Integer.parseInt(ast.getAttributeValue(null, "height"));   
                    mDrawable = new ShapeDrawable(new RectShape());   
                    mDrawable.getPaint().setColor(0xff74AC23);   
                    mDrawable.setBounds(x, y, x + width, y + height); 
    }
   protected void onDraw(Canvas canvas) {
        mDrawable.draw(canvas);
    }
}

现在我可以使用这个程序在温度计图像上画一条线。

但是如何在运行时更改线条的高度。 由于height = 100写在xml文件中,我不知道如何更改它。

请有人帮助我。

2 个答案:

答案 0 :(得分:1)

你可以:

  • 让“身高”成为CustomDrawableView
  • 的成员
  • 然后创建一个方法setHeight(int height),您可以在其中更改高度值。
  • 然后在您的活动中使用(CustomDrawableView)findViewById(R.id.custom_drawable_view)来获取对viewObject的引用。
  • 然后通过调用setHeight(x)
  • 更改值

希望有所帮助

答案 1 :(得分:1)

首先,我认为你不需要在drawShape(AttributeSet ast)中传递属性,而只需要在构造函数CustomDrawableView()中传递高度。然后克里斯说你应该在自定义视图中有另一种方法,如

public void setTemperature(int tmp){
  drawShape(tmp);
  invalidate(); //this will call onDraw()
}

在您的主要活动中,引用您的自定义视图,以便您可以调用其公共方法

  CustomDrawableView temperatureView = 
                  (CustomDrawableView) findViewById(R.id.custom_drawable_view);

  temperatureView.setTemperature(50);