表白神器(画笔+计算坐标+处理触摸事件)

既然有约炮神器,哥来弄一个表白神器。

表白,

表白神器(画笔+计算坐标+处理触摸事件)

妹子虽然很高兴,但是还是点了no,

表白神器(画笔+计算坐标+处理触摸事件)

妹纸发现,No跳走了,又连击了几下,还是到处乱跳。索性点了yes,

表白神器(画笔+计算坐标+处理触摸事件)


走,下个apk,在qq上发你心仪的妹子吧!

技术上,就是用画笔+计算坐标+处理触摸事件。

画笔,

表白神器(画笔+计算坐标+处理触摸事件)


表白神器(画笔+计算坐标+处理触摸事件)

复习onDraw方法,还有画字,

表白神器(画笔+计算坐标+处理触摸事件)


表白神器(画笔+计算坐标+处理触摸事件)


处理触摸事件:

表白神器(画笔+计算坐标+处理触摸事件)

判断触摸的坐标正是no的坐标时,更新NoX、NoY值,并且用invalindate()方法重新绘制画布,

表白神器(画笔+计算坐标+处理触摸事件)

调用invalindate后,重新执行onDraw()方法,于是就在新的地方drawText  "no"。

MainActivity.java:

package lzw.customview;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.MotionEvent;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MainActivity extends Activity {
	public TextView tv;
	int cnt=-1;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		LinearLayout root=(LinearLayout)
		  findViewById(R.id.root);
		final DrawView draw=new DrawView(this);
		draw.setMinimumWidth(200);
		draw.setMinimumHeight(300);
		root.addView(draw);
		
		//获取屏幕尺寸
		/*DisplayMetrics dm=new DisplayMetrics();
		super.getWindowManager().getDefaultDisplay().
		  getMetrics(dm);
		draw.setWidthAndHeight(dm.widthPixels,dm.heightPixels);*/
	}
	@Override
	public boolean onTouchEvent(MotionEvent event){
		cnt++;
		if(cnt%10!=0) return true;
		Intent intent=new Intent();
		intent.setClass(MainActivity.this,Wonderful.class);
		MainActivity.this.startActivity(intent);
		return true;
	}
}

DrawView.java,

package lzw.customview;

import android.content.Context;
import android.content.Intent;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;

public class DrawView extends View {
	public float currentX, currentY;
	public float YesX, YesY, NoX = 200, NoY = 200;
	float textSize = 100;
	int cntYes = 0, widthPixels, heightPixels, width, height;
	Paint p = new Paint();
	Paint p1 = new Paint();
	TextView tv;
	int cnt=0;
	public DrawView(Context context) {
		super(context);
	}
	public DrawView(Context context, AttributeSet set) {
		super(context, set);
	}
	public void setTextView(TextView tv1) {
		this.tv = tv1;
	}
	public void setWidthAndHeight(int width, int height) {
		widthPixels = width;
		heightPixels = height - 500;
	}
	@Override
	public void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		p1.setColor(Color.YELLOW);
		p.setColor(Color.GREEN);
		p.setTextSize(100);
		p1.setTextSize(100);
		if (cnt == 0) {
			width = getWidth();
			height = getHeight();
			int margin = 200;
			YesX = width / 2 - margin;
			NoX = (float) (width / 2 + margin);
			YesY = NoY = (float) (height - 200);
		}
		cnt++;
		canvas.drawText("No", NoX, NoY, p1);
		canvas.drawText("Yes", YesX, YesY, p);
	}
	boolean rightXY(float x1, float y1, float x, float y, float width,
			float height) {
		return x1 > x && x1 < x + width && y1 < y && y1 > y - height;
	}
	boolean inWindow(float x, float y) {
		return x > 0 && x < width && y > 0 && y < height;
	}
	
	public boolean onTouchEvent(MotionEvent event) {
		currentX = event.getX();
		currentY = event.getY();
		if (rightXY(currentX, currentY, YesX, YesY, 170, 100)) {
			if (cntYes%50 == 0)
			{
				//Toast.makeText(getContext(), "我一定会好好对你的!", Toast.LENGTH_SHORT).show();
				return false;
			}
			cntYes++;
			return true;
		}
		if (rightXY(currentX, currentY, NoX, NoY, 120, 100)) {
			float nx, ny;
			do {
				nx = (float) (Math.random() * width);
				ny = (float) (Math.random() * height);
			} while (rightXY(nx, ny, NoX, NoY, 120, 100)
					|| rightXY(nx, ny, YesX, YesY, 170, 100) || (!inWindow(nx, ny))
					|| (!inWindow(nx + 120, ny - 100)) 
					|| rightXY(nx+120,ny-100,YesX,YesY,170,100));
			NoX = nx;
			NoY = ny;
			invalidate();
		}
		return true;
	}
}

完整源码

表白神器(画笔+计算坐标+处理触摸事件)

上一篇:uva 10755 - Garbage Heap(最大和问题)


下一篇:Linux Debugging: 熟悉AT&T汇编语言