8

通过拥有以下代码,我有一些问题。

public class MainActivity extends Activity {

   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView( new View(this) {
         Paint mPaint = new Paint();

         @Override
         protected void onDraw(Canvas canvas) {
            // TODO Auto-generated method stub
            super.onDraw(canvas);


            int width = this.getWidth();
            int height = this.getHeight();
            int radius = width > height ? height/2 : width/2;
            int center_x = width/2;
            int center_y = height/2;

            // prepare a paint
            mPaint.setStyle(Paint.Style.STROKE);
            mPaint.setStrokeWidth(5);
            mPaint.setAntiAlias(true);

            // draw a rectangle
            mPaint.setColor(Color.BLUE);
                mPaint.setStyle(Paint.Style.FILL); //fill the background with blue color
            canvas.drawRect(center_x - radius, center_y - radius, center_x + radius, center_y + radius, mPaint);
            // draw some text and rotation
            mPaint.setTextSize(50);
            mPaint.setTextAlign(Paint.Align.CENTER);
            mPaint.setColor(Color.BLACK);
            canvas.drawText( "Hello World" , center_x , center_y, mPaint);
         }
      });
    }
}

在此处输入图像描述

Q1:如何在框架中填充蓝色?(字依然出现)

Q2:这个应用程序中有多少视图和表面?我如何在应用程序中计算这些?

Q3:这个应用程序有多少个窗口?

Q4:在代码中,我没有看到任何位图对象。但是,我认为位图是我真正可以在其上绘制东西的对象。我的理解不正确吗?一种可能性是 Canvas 构造函数在新建位图时对其进行初始化。

Q5:我知道这些图形的东西最终会浮出水面,然后传递给surfaceflinger进行最终合成。它在我的代码中的什么位置?

感谢您的回复。

4

3 回答 3

8

五个问题。让我们看看我能在哪里提供帮助。

Q1:告诉Paint填充矩形:paint.setStyle(Paint.Style.FILL);

Q2:我只看到您以编程方式创建的一个视图。为什么要计算观看次数?

Q3:再次:一个

Q4:您通过用Canvas. 实际绘制的方法是Canvas

Q5:您显示的代码是活动的一部分。Activity 由 Android 调用。这是您进入应用程序的入口点。

于 2013-09-22T17:47:58.320 回答
6

感谢你的回答。我完成了为标记答案制作代码的工作,并且它有效。

    Bitmap bg = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bg);
    // paint background with the trick
    Paint rect_paint = new Paint();
    rect_paint.setStyle(Paint.Style.FILL);
    rect_paint.setColor(Color.rgb(0, 0, 0));
    rect_paint.setAlpha(0x80); // optional
    canvas.drawRect(0, 0, width, height, rect_paint); // that's painting the whole canvas in the chosen color.
于 2016-11-04T00:07:51.943 回答
0

Q2:Hierarchy Viewer 在您想计算应用中的查看次数时非常有用。 优化你的用户界面

于 2013-09-23T03:35:29.180 回答