Android 仿哆啦A梦眼睛“看着我”
- 时间:2019-06-10
- 概述:看着我
Android 仿手机中的哆啦A梦眼睛看着我特效,手指滑动到哪里,手机中的哆啦A梦眼睛就看哪里,不停地看着手指。编写时主要使用Activity类中的onTouchEvent ()方法(用于获取手指点在屏幕上的位置),Canvas类中的onDraw()方法(用于刷新眼睛的位置),Math类中的abs()方法(用于判断手指滑动的角度),实现手势监听和绘制左右眼的View。
在onDraw()的法中绘制出哆啦A梦的眼睛:
// 消除锯齿 //paint.setAntiAlias(true); // 消除锯齿 paint2.setAntiAlias(true); // 设置画笔的颜色 paint2.setColor(Color.BLACK); // 设置paint的外框宽度 //paint.setStrokeWidth(2); canvas.save(); //锁定画布 canvas.rotate(s, x, y);//旋转45? //paint.setColor(Color.BLUE); //设置画笔颜色
初始化左右眼的视图,获取屏幕宽、高等:
private void init() { /** * 初始化左右眼的view * */ leftEyeView = new LeftEyeView(this); rightEyeView = new RightEyeView(this); /** * 获取屏幕的宽高 * */ WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE); w = wm.getDefaultDisplay().getWidth(); h = wm.getDefaultDisplay().getHeight(); relativeLayout = (RelativeLayout) findViewById(R.id.activity_main); /** * 设置左眼的宽高 * */ leftEyeView.setMinimumHeight(200); leftEyeView.setMinimumWidth(200); /** * 设置右眼的宽高 * */ rightEyeView.setMinimumHeight(200); rightEyeView.setMinimumWidth(200); /** * 绘制出左右眼,并添加到布局中 * */ leftEyeView.invalidate(); rightEyeView.invalidate(); relativeLayout.addView(leftEyeView); relativeLayout.addView(rightEyeView); /** * 两眼最先出现的坐标 * */ rightEyeView.setXY(w / 2 + 100, h / 2); leftEyeView.setXY(w / 2 - 100, h / 2); }
通过Math类的函数获取到手指滑动的弧度传递给左右眼绘制的方法进行重绘:
float x = event.getX(); float y = event.getY(); if (MotionEvent.ACTION_DOWN == event.getAction()) { leftEyeView.setZQ(w / 2 - 100, h / 2 - 80); rightEyeView.setZQ(w / 2 + 100, h / 2 - 80); } else if (MotionEvent.ACTION_MOVE == event.getAction()) { int x1 = w / 2, y1 = h / 2; //点1坐标; int x2 = (int) event.getX(), y2 = (int) event.getY(); //点2坐标 int m = Math.abs(x1 - x2); int n = Math.abs(y1 - y2); double z = Math.sqrt(m * m + n * n); int jiaodu = Math.round((float) (Math.asin(n / z) / Math.PI * 180));//最终角度 Log.e("-----", "jiaodu:" + jiaodu); if (x > (w / 2) && y < (h / 2)) { //手指在第一象限 leftEyeView.setS((float) (90 - jiaodu)); rightEyeView.setS((float) (90 - jiaodu)); } else if (x < (w / 2) && y < (h / 2)) { //手指在第二象限 leftEyeView.setS((float) (270 + jiaodu)); rightEyeView.setS((float) (270 + jiaodu)); } else if (x < (w / 2) && y > (h / 2)) { //手指在第三象限 leftEyeView.setS((float) (270 - jiaodu)); rightEyeView.setS((float) (270 - jiaodu)); } else if (x > (w / 2) && y > (h / 2)) { //手指在第四象限 leftEyeView.setS((float) (90 + jiaodu)); rightEyeView.setS((float) (90 + jiaodu)); } } else if (MotionEvent.ACTION_UP == event.getAction()) { leftEyeView.setZQ(w / 2 - 100, h / 2); rightEyeView.setZQ(w / 2 + 100, h / 2); }
在onDrawO方法中绘制眼睛时,请尝试实现哆啦A梦的左眼为蓝色,右眼为黑色的效果。
请参考这里的完整源代码:Android 仿游戏开发中的眼睛看着我特效
相关声明:
- 若“Android 仿哆啦A梦眼睛“看着我””有损您的权益,请告之我们删除内容。
部分文章来源于网络,版权归原作者所有。