【问题标题】:Android: How to use the onDraw method in a class extending Activity?Android:如何在扩展 Activity 的类中使用 onDraw 方法?
【发布时间】:2014-01-19 19:39:43
【问题描述】:

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

现在,我想加载一个位图(png 文件)放在柜台旁边。我一直在阅读 onDraw(),但它需要类来扩展“视图”。我一直在尝试创建此类的对象来使用它,但无济于事。我对这个概念有点困惑,如何轻松地做到这一点。如果有人能解释一下,我将不胜感激。

【问题讨论】:

    标签: android android-activity sdk extends ondraw


    【解决方案1】:

    使用 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, y, radius, paint);
        }
    
    }
    
    }
    

    【讨论】:

    • 很好,简洁的答案。应标记为答案。感谢您显示 View 代码以及 Activity 中的 setContentView() 调用。这帮助我得到了我需要的东西。
    • 这只是 android canvas 的工作示例。我仍然需要重绘我可以把这个 willNotDraw(false);
    【解决方案2】:

    我认为由于使用 Canvas,您不能在扩展 Activity 的类中使用 onDraw,您需要创建一个自定义组件扩展一些 View 并在那里处理您的操作,您需要做什么=>

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

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

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

    【讨论】:

      【解决方案3】:

      你不能在你的柜台旁边放一个 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

      【讨论】:

        【解决方案4】:

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

        txtview_counter.drawableLeft="@drawable/xxx"

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-08-25
          • 1970-01-01
          • 1970-01-01
          • 2012-06-05
          • 1970-01-01
          • 2014-01-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多