作为初学者,我一直在使用一个简单的布局xml和一个名为'Counter'的类来构建一个简单的计数器应用程序,它从类Activity派生(扩展)。
现在,我想加载一个位图(png文件)放在计数器旁边。我一直在阅读onDraw(),但它要求类扩展'View'。我一直试图创建这个类的对象来代替使用它,但无济于事。我对这个概念感到有点难过,如何轻松地做到这一点。如果有人能解释,我会很感激。
答案 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"