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

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

表白,


妹子虽然很高兴,但是还是点了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;
	}
}

完整源码

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值