package com.example.administrator.wingcool_gt9_apk;

import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;


import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;

import java.util.Locale;


/**
 * Created by yeyy on 10/23/2015.
 */
class MyView extends SurfaceView implements SurfaceHolder.Callback {


    //    最多的触摸点数量
    private static final int MAX_TOUCHPOINTS = 10;
    //    提示问题
    private final String START_TEXT = (String) this.getResources().getString(R.string.touchdemo);// "请点击触摸屏幕进行测试";
    //    文字笔画
    private Paint textPaint=new Paint();
    //    圆形画笔
    private Paint touchPaints[]=new Paint[MAX_TOUCHPOINTS];
    //   对应每一个圆形画笔的颜色
    private int colors[]=new int[MAX_TOUCHPOINTS];
    //    记录屏幕的宽度和高度
    private int width,height;
    //    放大的倍数
    private float scale =2.0f;

    //    记录坐标点，画线使用
    private int newx[]=new int[MAX_TOUCHPOINTS];
    private int newy[]=new int[MAX_TOUCHPOINTS];
    private int startx[]=new int[MAX_TOUCHPOINTS];
    private int starty[]=new int[MAX_TOUCHPOINTS];

    public MyView(Context context) {
        super(context);
        //        得到当前的view的surfaceHolder对象
        SurfaceHolder holder=getHolder();
        //        设置当前holder的回调方法
        holder.addCallback(this);
        //        确保我们的View能获得输入焦点
        setFocusable(true);
        //        确保能接受到触屏事件
        setFocusableInTouchMode(true);
        init();
    }


    private void init() {
        //        初始化文字笔的颜色
        textPaint.setColor(Color.WHITE);
        //        定义十种按键的颜色值
        colors[0]=Color.BLUE;//蓝色
        colors[1]=Color.RED;//红色
        colors[2]=Color.GREEN;//绿色
        colors[3]=Color.YELLOW;//黄色
        colors[4]=Color.CYAN;//蓝绿色
        colors[5]=Color.MAGENTA;//洋红色
        colors[6]=Color.DKGRAY;//深灰色
        colors[7]=Color.WHITE;//白色
        colors[8]=Color.LTGRAY;//浅灰色
        colors[9]=Color.GRAY;//灰色
        //        分别初始化每个手指的颜色值的笔
        for (int i=0;i<MAX_TOUCHPOINTS;i++){
            touchPaints[i]=new Paint();
            touchPaints[i].setColor(colors[i]);
        }
    }


    /**
     * 处理触屏事件
     */
    @Override
    public boolean onTouchEvent(MotionEvent event){
        //        获得屏幕触点数量
        int pointerCount=event.getPointerCount();
        if (pointerCount>MAX_TOUCHPOINTS){
            pointerCount=MAX_TOUCHPOINTS;
        }
        //        锁定Canvas，开始进行相应的界面处理
        Canvas c=getHolder().lockCanvas();

        if (c!=null){

            /**
            //---------------画线功能demo【目前存在飞线、闪烁、无法清除轨迹等问题】----------------
            switch (event.getAction()){//获取用户的行动
                case MotionEvent.ACTION_DOWN://按下时回调

                    //获取用户手指按下时的坐标
                    for(int i=0;i<pointerCount;i++){
                        int id=event.getPointerId(i);
                        startx[id] = (int)  event.getX(i);
                        starty[id] = (int)  event.getY(i);
                    }

                    break;
                case MotionEvent.ACTION_POINTER_DOWN://
                    //获取用户手指按下时的坐标
                    for(int i=0;i<pointerCount;i++){
                        int id=event.getPointerId(i);
                        startx[id] = (int)  event.getX(i);
                        starty[id] = (int)  event.getY(i);
                        newx[id]=startx[id];
                        newy[id]=starty[id];
                        //在背景图画线
                        c.drawLine(startx[id],starty[id],newx[id],newy[id],touchPaints[id]);
                    }
                    //c.drawColor(Color.BLACK);
                    break;

                case MotionEvent.ACTION_MOVE://手指滑动时调用
                    for(int i=0;i<pointerCount;i++){
//                    获取一个触点的坐标，然后开始绘制
                        int id=event.getPointerId(i);
                        newx[id] = (int)  event.getX(i);
                        newy[id] = (int)  event.getY(i);
                        //在背景图画线
                        c.drawLine(startx[id],starty[id],newx[id],newy[id],touchPaints[id]);
                        startx[id]=newx[id];
                        starty[id]=newy[id];
                    }

                    break;
                case MotionEvent.ACTION_UP://松开（抬起）的调用
                    //            定义canvas的背景颜色值为黑色
                    c.drawColor(Color.BLACK);
                    break;


                default:
                    //            定义canvas的背景颜色值为黑色
                   // c.drawColor(Color.WHITE);
                    break;

            }
*/

            //  定义canvas的背景颜色值为黑色
            c.drawColor(Color.BLACK);

            if (event.getAction()==MotionEvent.ACTION_UP){
            //                当手离开屏幕时，清屏

            }else {
                //                先在屏幕上画一个十字，横向贯穿屏幕，纵向贯穿屏幕
                for(int i=0;i<pointerCount;i++){
                    //                    获取一个触点的坐标，然后开始绘制
                    int id=event.getPointerId(i);
                    int x=(int) event.getX(i);
                    int y=(int) event.getY(i);
                    int size= (int) (event.getSize(i)*100);
                    drawCrossHairsAndText(x,y,touchPaints[id],i,id,size,c);
                }
                //                使用不同的颜色在每个手指的位置画圆
                for (int i = 0; i < pointerCount; i++) {
                    int id=event.getPointerId(i);
                    int x=(int) event.getX(i);
                    int y=(int) event.getY(i);
                    drawCircle(x, y, touchPaints[id], c);
                }
            }
            //            画完后，解锁显示
            getHolder().unlockCanvasAndPost(c);
        }
        return true;
    }
    /**
     * 画十字交叉线及坐标信息
     * @param x:线的x坐标
     * @param y:线的y坐标
     * @param paint:线的颜色
     * @param ptr:第几个点
     * @param id:id值
     * @param c:画布
     */
    private void drawCrossHairsAndText(int x, int y, Paint paint,
                                       int ptr, int id,int size, Canvas c) {

        //        在（0，y）和（width ，y）这两个点上画直线
        c.drawLine(0,y,width,y,paint);
        //        在（x，0）和（x，height）这两个点上画直线
        c.drawLine(x,0,x,height,paint);
        //        定义文字的大小
        int textY=(int)((20+25*ptr)*scale);
        //        画出x的值
        c.drawText("x"+ptr+"="+x,10*scale,textY,textPaint);
        //        画出Y的值
        c.drawText("y"+ptr+"="+y,90*scale,textY,textPaint);
        //        画出SIZE的值
        c.drawText("size"+ptr+"="+size,170*scale,textY,textPaint);
        //        画出id的值
        c.drawText("id"+ptr+"="+id,width-55*scale,textY,textPaint);

    }


    /**
     * 画手指单击的实心圆
     * @param x:实心圆的x值
     * @param y:实心圆的y值
     * @param paint:实心圆的画笔
     * @param c:在这个画布上画
     */
    private void drawCircle(int x,int y,Paint paint,Canvas c){
        //     在canvas上画圆
        c.drawCircle(x,y,20*scale,paint);
    }


    public MyView(Context context, AttributeSet attrs) {


        super(context, attrs);
    }


    public MyView(Context context, AttributeSet attrs, int defStyle) {


        super(context, attrs, defStyle);
    }


    //在创建时激发，一般在这里调用画图的线程。
    @Override
    public void surfaceCreated(SurfaceHolder holder) {


    }


    //在surface的大小发生改变时激发
    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {


        //        得到屏幕的宽度
        this.width=width;
        //        得到屏幕的高度
        this.height=height;
        //        得到屏幕的放大比例
        if (width>height){
            this.scale=width/480f;
            this.scale=height/480f;
        }
        //        通过放大比例计算出字体大小
        textPaint.setTextSize(20*scale);
        //        得到当前View的holder对象
        Canvas c=getHolder().lockCanvas();
        //        设置背景为黑色
        if (c!=null){
            //            背景黑色
            c.drawColor(Color.BLACK);
            //            在屏幕中间画上提示语
            float tWidth=textPaint.measureText(START_TEXT);
            c.drawText(START_TEXT,width/2-tWidth/2,height/2,textPaint);
            //            解锁显示
            getHolder().unlockCanvasAndPost(c);
        }
    }
    //销毁时激发，一般在这里将画图的线程停止、释放。
    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {


    }
}

public class DemoTools extends AppCompatActivity {

    private Context mAlertContext;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       // setContentView(R.layout.activity_demo_tools);
        mAlertContext = DemoTools.this;
        ConstantsActivity.activityList.add(this);
        //switchLanguage(ConstantsActivity.langae);

        //        setContentView(R.layout.main);
        //        隐藏标题栏
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        //        设置成全屏
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        //        设置为上面的MyView为当前的页面对象
        setContentView(new MyView(this));
    }

    //核心设置的代码
    protected void switchLanguage(String language) {
        Resources resources = getResources();
        Configuration config = resources.getConfiguration();
        DisplayMetrics dm = resources.getDisplayMetrics();
        switch (language) {
            case "zh":
                config.locale = Locale.CHINESE;
                resources.updateConfiguration(config, dm);
                break;
            case "en":
                config.locale = Locale.ENGLISH;
                resources.updateConfiguration(config, dm);
                break;
            default:
                config.locale = Locale.US;
                resources.updateConfiguration(config, dm);
                break;
        }
    }
}
