আমি একটি সর্বদা-অপ-টপ বোতাম / ক্লিকযোগ্য-চিত্র তৈরি করার চেষ্টা করছি যা সমস্ত সময় সমস্ত উইন্ডোর উপরে থাকে।
ধারণার প্রমাণ হয়
- এখানে - স্মার্ট টাস্কবার (অ্যাপব্রিনে)
- এবং এখানে V1.4.0 সাইডবার শৈলী SWKey - বোতাম ত্রাণকর্তা (এক্সডিএ-বিকাশকারীদের উপর)
আমি সফল এবং এখন একটি চলমান সেবা আছে। পরিষেবাটি সর্বদা স্ক্রিনের উপরের বাম কোণে কিছু পাঠ্য প্রদর্শন করে যখন ব্যবহারকারীরা স্বাভাবিকভাবে অন্যান্য অ্যাপ্লিকেশনগুলির সাথে অবাধে যোগাযোগ করতে পারে।
আমি যা করছি তা হচ্ছে সাবক্লাস ViewGroup
এবং এটি পতাকা সহ মূল উইন্ডো ম্যানেজারে যুক্ত করুন TYPE_SYSTEM_OVERLAY
। এখন আমি এই পাঠ্যের জায়গায় একটি বোতাম / ক্লিকযোগ্য-চিত্র যুক্ত করতে চাই যা নিজেই স্পর্শ ইভেন্টগুলি পেতে পারে। আমি পুরোটির জন্য "অন টাচএভেন্ট" ওভাররাইড করার চেষ্টা করেছি ViewGroup
তবে এটি কোনও ইভেন্ট পায় না।
আমি কীভাবে কেবলমাত্র আমার সর্বদা শীর্ষে থাকা গোষ্ঠীর কয়েকটি অংশে ইভেন্টগুলি পেতে পারি? দয়া করে পরামর্শ দিন।
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()
করা হচ্ছে যে আপনাকে ডাকা হচ্ছে। dispatchDraw()
পরিবর্তে ওভাররাইড করা উচিত নয় ? গ্রুপ. google.com/forum/?fromgroups#!topic/android-developers/…