关闭

android_绘制鼠标

154人阅读 评论(1) 收藏 举报
分类:

转自:http://blog.csdn.net/xhcbird/article/details/17269055

不需要修改framework直接java绘制。

package com.example.hellocursor;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.graphics.PixelFormat;
import android.util.Log;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.WindowManager;
import android.widget.ImageView;

@SuppressLint("HandlerLeak") public class MainActivity extends Activity {

	private WindowManager wM;
	private WindowManager.LayoutParams lP;
	private ImageView ivCursor;
	private static final int msgUpdateView =1;
	volatile boolean bThreadRun = true;
	static int gaga = 1;
    @Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		//full screen;
		getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
				WindowManager.LayoutParams.FLAG_FULLSCREEN);
		//WindowManager;
		wM = (WindowManager)getBaseContext().getSystemService(Context.WINDOW_SERVICE);
		//top view for cursor;
		//copy from frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
		lP = new WindowManager.LayoutParams();
		lP.height = WindowManager.LayoutParams.WRAP_CONTENT;
		lP.width = WindowManager.LayoutParams.WRAP_CONTENT;
		//need:<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
		lP.type = WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;
		lP.flags = WindowManager.LayoutParams.FLAG_FULLSCREEN
				| WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
				| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
				| WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
		lP.format = PixelFormat.TRANSLUCENT;
		//notice ,x=y=0; means center of window;
		lP.x = 0;
		lP.y = 0;
		//cursor image;
		ivCursor = new ImageView(this.getBaseContext());
		ivCursor.setImageResource(R.drawable.cursor);
		wM.addView(ivCursor, lP);
	}
    
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		// TODO Auto-generated method stub
		Log.i("mouse->", "onTouchEvent");
		//pen down and pen up; so use gaga;
		if(1 == gaga)
		{
			bThreadRun = true;
			lP.x = 0;
			lP.y = 0;
			new PrintMouse().start();
			gaga++;
		}
		//return super.onTouchEvent(event);
		return true;
	}

	class PrintMouse extends Thread {
		public void run() {
			while (bThreadRun) {
				Log.i("mouse->", "Thread");			
				try {
					sleep(200);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				Message m = new Message(); 
				m.what = msgUpdateView;
				myMessageHandler.sendMessage(m); 
			}
		}
	}
	
	Handler myMessageHandler = new Handler() {
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case msgUpdateView:
				lP.x = relX();
				lP.y = relY();				
				if(bThreadRun)
				{
					wM.updateViewLayout(ivCursor, lP);	
				}
				break;
			}
			super.handleMessage(msg);
		}
	};

    @Override
	public void finish() {
		// TODO Auto-generated method stub
    	bThreadRun = false;
    	gaga = 1;
    	wM.removeView(ivCursor);
		super.finish();
	}

	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
	}

	@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
	
	public native int relX();
	public native int relY();
    static {
        System.loadLibrary("mouse");
    }
}


0
0
查看评论

android_绘制鼠标

不需要修改framework直接java绘制。 package com.example.hellocursor; import android.os.Bundle; import android.os.Handler; import android.os.Message; import andr...
  • u013025459
  • u013025459
  • 2013-12-11 20:04
  • 1078

一种通过鼠标操作实现多边形的绘制的实现方法

前面的《MFC基本图形的绘制(三)在SDI中实现绘图操作》对多边形的绘制做了一个简单的介绍。尽管也实现了多边形的绘制,但那种方法有很大的局限性,最主要的就是表现在多边形的顶点(个数和位置)必须固定。通常在实际的项目中,多边形的顶点个数和位置并不固定。例如在进行道路计算时,可能会避开某些区域(规避区域...
  • shufac
  • shufac
  • 2014-04-02 00:01
  • 1713

canvas画图:用鼠标---画曲线,直线,矩形,圆

<canvas id="canvas" width="800" height="500"></canvas> <script src="js/jquery-3.2.1.min.js">...
  • qq_31164127
  • qq_31164127
  • 2017-06-08 17:28
  • 1869

Qt之鼠标随手画及画多边形

主要是用Qt实现2D涂鸦及话多边形的功能,我的版本是Qt5.3。
  • u010906483
  • u010906483
  • 2016-03-12 14:17
  • 3169

关于opencv2.4.10鼠标操作画矩形

下面的实例是我参考opencv3书籍编写的代码,通过鼠标绘制不同颜色的矩形。#include "opencv2/opencv.hpp" #include using namespace cv; using namespace std; #define WINDOW_NAME...
  • u014455876
  • u014455876
  • 2016-08-30 20:14
  • 607

利用鼠标绘制不规则ROI

转自:http://blog.csdn.net/destiny_1027/article/details/7532789     ROI(Regions Of Interest)区域在实际工作中有着很重要的作用,它不仅能提高计算机视觉代码的执行速度,而且还...
  • hcstar
  • hcstar
  • 2016-03-10 21:54
  • 559

HTML5 Canvas实现web画图之自由绘制矩形

该篇讲的主要是像windows附件中选择矩形框之后,可以在画布上自由绘制矩形功能的实现。
  • ydd24516
  • ydd24516
  • 2015-08-02 22:58
  • 3506

Android_过度绘制优化

**绘制颜色的标识,从好到差:蓝色(1x次绘制)-》浅绿色(2x绘制)-》淡红色(3x绘制)-》红色(4x绘制)。 一般情况下,最好把绘制控制在2次以下,3次绘制有时候是不能避免的,尽量避免,4次的绘制基本上是不允许的。** 既然你搜索的是过度绘制的优化,哪么,你应该知道什么是过度绘制,所以我就...
  • qq_16666847
  • qq_16666847
  • 2016-12-01 16:32
  • 158

【实例】html5-canvas通过鼠标绘制线段

body { background: #eeeeee; } #controls { position: absolute; left: 25px; top: 25px; } #canvas { background: #ffffff; ...
  • u010513756
  • u010513756
  • 2015-08-12 19:21
  • 11715

Android_绘制圆形图片

package com.example.demo_drawcircle; import android.R.color; import android.os.Bundle; import android.app.Activity; import android.graphics.Bitmap; i...
  • u013372185
  • u013372185
  • 2014-11-24 11:19
  • 489
    个人资料
    • 访问:554450次
    • 积分:7257
    • 等级:
    • 排名:第3671名
    • 原创:75篇
    • 转载:538篇
    • 译文:1篇
    • 评论:91条
    最新评论