Android:如何在扩展Activity的类中使用onDraw方法?

时间:2014-01-19 19:39:44

标签: android android-activity sdk extends ondraw

作为初学者,我一直在使用一个简单的布局xml和一个名为'Counter'的类来构建一个简单的计数器应用程序,它从类Activity派生(扩展)。

现在,我想加载一个位图(png文件)放在计数器旁边。我一直在阅读onDraw(),但它要求类扩展'View'。我一直试图创建这个类的对象来代替使用它,但无济于事。我对这个概念感到有点难过,如何轻松地做到这一点。如果有人能解释,我会很感激。

4 个答案:

答案 0 :(得分:6)

使用onDraw函数的简单示例 - 它需要类来扩展视图

获取当前活动上下文的上下文

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(new myview(this));


}

class myview extends View
{

    public myview(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
    }
    @Override
    protected void onDraw(Canvas canvas)
    {
        super.onDraw(canvas);
        int x=80;
        int y=80;
        int radius=40;
        Paint paint=new Paint();
        // Use Color.parseColor to define HTML colors
        paint.setColor(Color.parseColor("#CD5C5C"));
        canvas.drawCircle(x,x, radius, paint);
    }

}

}

答案 1 :(得分:0)

我认为你因为使用Canvas而无法在扩展Activity的类中使用onDraw,你需要创建一个自定义组件来扩展一些View并处理你的动作,你需要做什么=>

1.使用您自己的类扩展现有的View类或子类。

2.从超类中删除一些方法。要覆盖的超类方法以'on'开头,例如onDraw(),onMeasure(),onKeyDown()。这类似于您在生命周期和其他功能挂钩中覆盖的Activity中的'on'事件。

3.使用新的扩展程序。完成后,可以使用新的扩展类来代替它所基于的视图。

答案 2 :(得分:0)

难道你不能只在你的柜台旁放置一个ImageView吗?您可以在xml布局文件中执行此操作:

<ImageView
    android:id="@id+/my_image"
    android:layout_width="50dip"
    android:layout_height="50dip"
    android:src="@drawable/name_of_my_image" />

或者你的辛勤工作:

@Override
protected void onCreate(Bundle bundle) {
    // ...
    ImageView image = (ImageView) findViewById(R.id.my_image);
    Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.my_image);
    image.setImageBitmap(bitmap);
}

如果您想使用自定义视图并覆盖onDraw()方法,则需要执行以下操作:

class MyCustomView extends View {
    public MyCustomView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        // your custom drawing
        canvas.drawRect(0, 0, 50, 50, new Paint());
    }
}

如有任何疑问,请参阅Android Training

答案 3 :(得分:0)

您无需为此目的使用View.onDraw()。 只需使用布局,并使用drawableLeft属性将任何可绘制图像放在您的计数器旁边,比如说文本视图。

txtview_counter.drawableLeft="@drawable/xxx"