zoukankan      html  css  js  c++  java
  • Android 窗体控件

    public class MainActivity extends Activity {
    
    	private static WindowManager windowManger = null;
    
    	// 悬浮窗的属性都在这里设置
    	private static WindowManager.LayoutParams lp = null;
    
    	// 定义一个悬浮的view
    	private static TextView textView = null;
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		// 这是在获取windowmanager对象
    		// 1、获取windowmanager的时候用的上下文,也要是app的。不然就退出不显示
    		windowManger = (WindowManager) getApplicationContext()
    				.getSystemService(Context.WINDOW_SERVICE);
    
    		lp = new WindowManager.LayoutParams();
    
    		// 警告框,覆盖物
    		lp.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT
    				| WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;
    
    		// 首先不获取焦点,为了让桌面上的图标正常使用,全屏可移动
    		lp.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
    				| WindowManager.LayoutParams.FLAG_FULLSCREEN;
    
    		lp.x = 10;
    		lp.y = 50;
    
    		lp.gravity = Gravity.LEFT | Gravity.TOP;
    
    		// 整个悬浮窗有多大?包裹内容
    		lp.width = WindowManager.LayoutParams.WRAP_CONTENT;
    		lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
    
    		// 半透明效果
    		lp.format = PixelFormat.TRANSPARENT;
    
    		if (textView == null) {
    
    			// 实例它的时候别用activity,因为我们这个是悬浮窗,也就是activity不在的时候,也要显示
    			textView = new TextView(getApplicationContext());
    			// textView里面内容
    			textView.setText("123123");
    			textView.setOnClickListener(new OnClickListener() {
    
    				@Override
    				public void onClick(View v) {
    					// TODO Auto-generated method stub
    					Intent intent = new Intent(getApplicationContext(),
    							MainActivity.class);
    					intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
    							| Intent.FLAG_ACTIVITY_CLEAR_TOP);
    					startActivity(intent);
    				}
    			});
    			textView.setOnTouchListener(new OnTouchListener() {
    
    				private WindowManager.LayoutParams mLp = lp;
    				private int lastX;
    				private int lastY;
    				private long lastDownTime = -1;
    
    				// 触摸监听
    				@Override
    				public boolean onTouch(View v, MotionEvent event) {
    					// TODO Auto-generated method stub
    					// 2、
    					// getX
    					// 此方法坐标系相对于view
    					// getRawX
    					// 此方法是获取相对于手机屏幕的位置
    					// 这个值用于返回
    					boolean ret = false;
    					switch (event.getAction()) {
    					case MotionEvent.ACTION_DOWN:
    						lastDownTime = System.currentTimeMillis();
    						lastX = (int) event.getRawX();
    						lastY = (int) event.getRawY();
    						ret = true;
    						break;
    					case MotionEvent.ACTION_MOVE:
    
    						float x = event.getRawX();
    						float y = event.getRawY();
    						int ix = (int) (x - lastX);
    						int iy = (int) (y - lastY);
    						mLp.x += ix;
    						mLp.y += iy;
    						lastX = (int) x;
    						lastY = (int) y;
    						// 把已经求解到的mlp作为参数,重新交给view
    						windowManger.updateViewLayout(textView, mLp);
    
    						break;
    					case MotionEvent.ACTION_UP:
    						long ct = System.currentTimeMillis();
    						if (ct - lastDownTime < 300) {
    							// 触发源生的点击事件
    							textView.performClick();
    						}
    						break;
    					default:
    						break;
    					}
    
    					return ret;
    				}
    			});
    
    			// 把这个textview显示出来
    
    			windowManger.addView(textView, lp);
    		} else {
    			windowManger.removeView(textView);
    			textView = null;
    		}
    
    	}
    
    	@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;
    	}
    
    }
    

      

  • 相关阅读:
    VBA值列选取与复制,赋值
    Processing的条件式
    VBA之四给程序自动加行号
    自上而下的语法分析
    Processing绘制四边形
    Processing的代码编写流程
    Processing编程语言简介
    follow集的求解
    Processing函数与循环
    在UBUNTU下用ruby求得网卡地址IP地址和用户名
  • 原文地址:https://www.cnblogs.com/qcgAd/p/5210221.html
Copyright © 2011-2022 走看看