Saya mencoba untuk membuat tombol selalu-op-top / diklik-gambar yang tetap di atas semua jendela sepanjang waktu.
Bukti konsepnya adalah
- di sini - Smart Taskbar (di AppBrain)
- dan di sini V1.4.0 Sidebar style SWKey - Tombol penyelamat (pada xda-developer)
Saya telah sukses dan memiliki layanan yang berjalan sekarang. Layanan ini menampilkan beberapa teks di sudut kiri atas layar sepanjang waktu sementara pengguna dapat secara bebas berinteraksi dengan aplikasi lainnya dengan cara normal.
Apa yang saya lakukan adalah subkelas ViewGroup
dan menambahkannya ke root window manager dengan flag TYPE_SYSTEM_OVERLAY
. Sekarang saya ingin menambahkan tombol / diklik-gambar di tempat teks ini yang dapat menerima peristiwa sentuhan itu sendiri. Saya mencoba mengganti "onTouchEvent" untuk keseluruhan ViewGroup
tetapi tidak menerima acara apa pun.
Bagaimana saya bisa menerima acara hanya pada bagian tertentu dari grup tampilan selalu di atas saya? Mohon saran.
public class HUD extends Service {
HUDView mView;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
Toast.makeText(getBaseContext(),"onCreate", Toast.LENGTH_LONG).show();
mView = new HUDView(this);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
0,
// WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
// | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.RIGHT | Gravity.TOP;
params.setTitle("Load Average");
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
wm.addView(mView, params);
}
@Override
public void onDestroy() {
super.onDestroy();
Toast.makeText(getBaseContext(),"onDestroy", Toast.LENGTH_LONG).show();
if(mView != null)
{
((WindowManager) getSystemService(WINDOW_SERVICE)).removeView(mView);
mView = null;
}
}
}
class HUDView extends ViewGroup {
private Paint mLoadPaint;
public HUDView(Context context) {
super(context);
Toast.makeText(getContext(),"HUDView", Toast.LENGTH_LONG).show();
mLoadPaint = new Paint();
mLoadPaint.setAntiAlias(true);
mLoadPaint.setTextSize(10);
mLoadPaint.setARGB(255, 255, 0, 0);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawText("Hello World", 5, 15, mLoadPaint);
}
@Override
protected void onLayout(boolean arg0, int arg1, int arg2, int arg3, int arg4) {
}
@Override
public boolean onTouchEvent(MotionEvent event) {
//return super.onTouchEvent(event);
Toast.makeText(getContext(),"onTouchEvent", Toast.LENGTH_LONG).show();
return true;
}
}
onDraw()
dipanggil. Bukankah dispatchDraw()
seharusnya diganti? Lihat groups.google.com/forum/?fromgroups#!topic/android-developers/…