Android懸浮視窗,android懸浮
FloatService:
package com.home.floatwindow;import android.app.Service;import android.content.Context;import android.content.Intent;import android.graphics.PixelFormat;import android.os.IBinder;import android.util.Log;import android.view.Gravity;import android.view.MotionEvent;import android.view.View;import android.view.View.OnClickListener;import android.view.View.OnTouchListener;import android.view.WindowManager;import android.view.WindowManager.LayoutParams;import android.widget.ImageView;import android.widget.LinearLayout;import com.home.testfolatwindow.R;public class FloatService extends Service {private WindowManager wm;private WindowManager.LayoutParams wmlp;private LinearLayout layout;@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic void onCreate() {super.onCreate();createFloatView();}private void createFloatView() {wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);wmlp = new WindowManager.LayoutParams();wmlp.type = LayoutParams.TYPE_PHONE;// 設定圖片格式,效果為背景透明wmlp.format = PixelFormat.RGBA_8888;// 設定浮動視窗不可聚焦wmlp.flags = LayoutParams.FLAG_NOT_FOCUSABLE;wmlp.gravity = Gravity.LEFT | Gravity.TOP;wmlp.x = 0;wmlp.y = 0;wmlp.width = WindowManager.LayoutParams.WRAP_CONTENT;wmlp.height = WindowManager.LayoutParams.WRAP_CONTENT;layout = getLayout();wm.addView(layout, wmlp);layout.measure(View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));ImageView iv = (ImageView) layout.findViewById(1);iv.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Log.i("onClick", "onClick");}});iv.setOnTouchListener(new OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {// getRawX是觸摸位置相對於螢幕的座標,getX是相對於按鈕的座標wmlp.x = (int) event.getRawX() - layout.getMeasuredWidth() / 2;// 減25為狀態列的高度wmlp.y = (int) event.getRawY() - layout.getMeasuredHeight() / 2- 25;wm.updateViewLayout(layout, wmlp);return false;}});}private LinearLayout getLayout() {LinearLayout layout = new LinearLayout(this);ImageView iv = new ImageView(this);iv.setBackgroundResource((R.drawable.ic_launcher));iv.setId(1);layout.addView(iv);return layout;}@Overridepublic void onDestroy() {super.onDestroy();if (layout != null) {// 移除懸浮視窗wm.removeView(layout);}}}
許可權:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
android懸浮窗優先順序,怎使自己寫的懸浮窗懸浮於一切懸浮窗及下拉式功能表自上
設定成phone類型的,可以保證永遠是在最上方的,因為打電話層級高於一切。
this.getWindow().setType(WindowManager.LayoutParams.TYPE_PHONE);
怎在android懸浮視窗上實現倒計時?
package yzy.yyy.yy;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.Toast;
public class TimeToast extends Activity {
int i = 60;
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what < 0) {
dialog.dismiss();
timer.cancel();
}
dialog.setMessage(msg.what + "");
}
};
AlertDialog dialog = null;
Timer timer = new Timer();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ttt);
dialog = new AlertDialog.Builder(this).setMessage("").create();
dialog.show();
timer.schedule(new TimerTask() {
@Override
public void run() {
Message msg = handler.obtainMessage();
msg.what = i;
handler.sendEmptyMessage(msg.what);
i = i - 1;
}
}, 1000, 1000);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (timer!=null) {
timer.cancel();
timer=null;
}
}
}...餘下全文>>