Android繪圖測試

今天記錄一下Android繪圖測試的一個程序。

程序要求,

1. 全屏顯示 紅/綠/藍/白/黑/灰,6種顏色;

2. 全屏顯示顏色條紋,從左到右顏色分別是,白/黃/淺藍/淺綠/紫/紅/藍;

3. 全屏顯示 3×5 的黑白相間的方塊;

4. 手工點擊屏幕,進入下一種顏色,顯示完畢,關閉程序;

 

下面一起看看要用到的技術,

1. 屏幕全屏化,參考下面整理的文章,

https://blog.csdn.net/jgw2008/article/details/100133261

2. 獲取屏幕的寬和高

https://blog.csdn.net/jgw2008/article/details/100140594

3. 繪圖,使用Paint和Canvas,需要繼承View class,每次需要呼叫setContentView(view)來更新視圖。

全部代碼整理如下,

package com.xxx.testgraphics;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.WindowManager;

public class MainActivity extends AppCompatActivity {
    private DrawPicture drawPicture;
    private int mCount = 0;
    private int mScreenHeight, mScreenWidth;

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

        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
                | View.SYSTEM_UI_FLAG_FULLSCREEN
                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);

        setContentView(R.layout.activity_main);

        DisplayMetrics dm = getResources().getDisplayMetrics();
        mScreenWidth = dm.widthPixels;
        mScreenHeight = dm.heightPixels;

        drawPicture = new DrawPicture(this);

        drawPicture.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mCount++;
                setContentView(drawPicture);
            }
        });

        setContentView(drawPicture);

    }

    private class DrawPicture extends View {
        public DrawPicture(Context context) {
            super(context);
        }

        @Override
        protected void onDraw(Canvas canvas){

            switch (mCount) {
                case 0:
                    this.setBackgroundColor(Color.RED);
                    break;
                case 1:
                    this.setBackgroundColor(Color.rgb(0, 176, 80));
                    break;
                case 2:
                    this.setBackgroundColor(Color.BLUE);
                    break;
                case 3:
                    this.setBackgroundColor(Color.WHITE);
                    break;
                case 4:
                    this.setBackgroundColor(Color.BLACK);
                    break;
                case 5:
                    this.setBackgroundColor(Color.rgb(127, 127, 127));
                    break;
                case 6:
                    drawColorBar(canvas);
                    break;
                case 7:
                    drawWhiteBlackBlock(canvas);
                    break;
                default:
                    finish();
                    break;
            }

            super.onDraw(canvas);

        }

        public void drawColorBar(Canvas canvas) {
            Paint paint = new Paint();
            paint.setColor(Color.WHITE);
            canvas.drawRect(new Rect(0, 0, mScreenWidth, 1* mScreenHeight / 7), paint);
            paint.setColor(Color.YELLOW);
            canvas.drawRect(new Rect(0, 1 * mScreenHeight / 7, mScreenWidth, 2 * mScreenHeight / 7), paint);
            paint.setColor(Color.rgb(0, 176, 240));  // It's light blue
            canvas.drawRect(new Rect(0, 2 * mScreenHeight / 7, mScreenWidth, 3 * mScreenHeight / 7), paint);
            paint.setColor(Color.rgb(146, 208, 80)); // It's light green
            canvas.drawRect(new Rect(0, 3 * mScreenHeight / 7, mScreenWidth, 4 * mScreenHeight / 7), paint);
            paint.setColor(Color.MAGENTA);
            canvas.drawRect(new Rect(0, 4 * mScreenHeight / 7, mScreenWidth, 5 * mScreenHeight / 7), paint);
            paint.setColor(Color.RED);
            canvas.drawRect(new Rect(0, 5 * mScreenHeight / 7, mScreenWidth, 6 * mScreenHeight / 7), paint);
            paint.setColor(Color.BLUE);
            canvas.drawRect(new Rect(0, 6 * mScreenHeight / 7, mScreenWidth, 7 * mScreenHeight / 7), paint);
        }

        public void drawWhiteBlackBlock(Canvas canvas) {
            Paint paint = new Paint();
            paint.setColor(Color.BLACK);
            canvas.drawRect(new Rect(0, 0, 1 * mScreenWidth / 3, 1 * mScreenHeight / 5), paint);
            paint.setColor(Color.WHITE);
            canvas.drawRect(new Rect(0, 1 * mScreenHeight / 5, 1 * mScreenWidth / 3, 2 * mScreenHeight / 5), paint);
            paint.setColor(Color.BLACK);
            canvas.drawRect(new Rect(0, 2 * mScreenHeight / 5, 1 * mScreenWidth / 3, 3 * mScreenHeight / 5), paint);
            paint.setColor(Color.WHITE);
            canvas.drawRect(new Rect(0, 3 * mScreenHeight / 5, 1 * mScreenWidth / 3, 4 * mScreenHeight / 5), paint);
            paint.setColor(Color.BLACK);
            canvas.drawRect(new Rect(0, 4 * mScreenHeight / 5, 1 * mScreenWidth / 3, 5 * mScreenHeight / 5), paint);
            paint.setColor(Color.WHITE);
            canvas.drawRect(new Rect(1 * mScreenWidth / 3, 0, 2 * mScreenWidth / 3, 1 * mScreenHeight / 5), paint);
            paint.setColor(Color.BLACK);
            canvas.drawRect(new Rect(1 * mScreenWidth / 3, 1 * mScreenHeight / 5, 2 * mScreenWidth / 3, 2 * mScreenHeight / 5), paint);
            paint.setColor(Color.WHITE);
            canvas.drawRect(new Rect(1 * mScreenWidth / 3, 2 * mScreenHeight / 5, 2 * mScreenWidth / 3, 3 * mScreenHeight / 5), paint);
            paint.setColor(Color.BLACK);
            canvas.drawRect(new Rect(1 * mScreenWidth / 3, 3 * mScreenHeight / 5, 2 * mScreenWidth / 3, 4 * mScreenHeight / 5), paint);
            paint.setColor(Color.WHITE);
            canvas.drawRect(new Rect(1 * mScreenWidth / 3, 4 * mScreenHeight / 5, 2 * mScreenWidth / 3, 5 * mScreenHeight / 5), paint);
            paint.setColor(Color.BLACK);
            canvas.drawRect(new Rect(2 * mScreenWidth / 3, 0, 3 * mScreenWidth / 3, 1 * mScreenHeight / 5), paint);
            paint.setColor(Color.WHITE);
            canvas.drawRect(new Rect(2 * mScreenWidth / 3, 1 * mScreenHeight / 5, 3 * mScreenWidth / 3, 2 * mScreenHeight / 5), paint);
            paint.setColor(Color.BLACK);
            canvas.drawRect(new Rect(2 * mScreenWidth / 3, 2 * mScreenHeight / 5, 3 * mScreenWidth / 3, 3 * mScreenHeight / 5), paint);
            paint.setColor(Color.WHITE);
            canvas.drawRect(new Rect(2 * mScreenWidth / 3, 3 * mScreenHeight / 5, 3 * mScreenWidth / 3, 4 * mScreenHeight / 5), paint);
            paint.setColor(Color.BLACK);
            canvas.drawRect(new Rect(2 * mScreenWidth / 3, 4 * mScreenHeight / 5, 3 * mScreenWidth / 3, 5 * mScreenHeight / 5), paint);
        }


    }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章