ライブ壁紙やビデオなどで既に実行されているタスクを邪魔することなく、画面の左側にアプリケーション メニュー バーを表示したいのですが、どうすれば実現できますか?
質問する
573 次
3 に答える
0
github の NewPopupMenu ライブラリを使用できます。
任意のリスナーの画面上の任意の場所にインスタント ポップアップ メニューを作成します。
ライブラリをダウンロードして解凍し、ソース ファイルをプロジェクトにコピーし、この行mPopupWindow.showAtLocation(parent, Gravity.CENTER, 0, 0);
のコードを変更して、必要な場所にメニューを配置するだけです。
于 2013-01-09T06:58:25.927 に答える
0
こちらのサービスクラスをご利用ください。アクティビティからこのサービスを開始すると、モバイル画面に画像が表示されます。モバイルのどこにでも設定できることを調整することによって。また、いつでもサービスを停止することで削除できます。
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;
import android.app.Service;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.os.Environment;
import android.os.IBinder;
import android.os.RemoteException;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewDebug;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
public class HUD extends Service {
HUDView mView;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
mView = new HUDView(this);
mView.setId(R.id.button);
WindowManager.LayoutParams paramsOrg = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
PixelFormat.TRANSLUCENT);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(100, 100, 2007, 8, -3);
Button bb=new Button(this);
bb.setText("Button");
bb.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
System.out.println("Clicked----><<<<<<<");
}
});
bb.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
System.out.println("Touched =----- > ");
return false;
}
});
params.gravity = Gravity.RIGHT | Gravity.TOP;
params.setTitle("Load Average");
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
wm.addView(bb, 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;
}
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
//Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
restartService();
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
//Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
restartService();
}
}
private void restartService() {
// TODO Auto-generated method stub
stopService(new Intent(getBaseContext(), HUD.class));
startService(new Intent(getBaseContext(), HUD.class));
}
}
class HUDView extends ViewGroup {
private Paint mLoadPaint;
private Float XMAX=280f;
private Float YMAX=26f;
private int XPOS=0;
public HUDView(Context context) {
super(context);
mLoadPaint = new Paint();
mLoadPaint.setAntiAlias(true);
mLoadPaint.setTextSize(10);
mLoadPaint.setARGB(255, 255, 0, 0);
context.bindService(intents, aslServiceConnection, Context.BIND_AUTO_CREATE);
WindowManager wind = (WindowManager)context.getSystemService(Service.WINDOW_SERVICE);
XPOS=wind.getDefaultDisplay().getWidth();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//canvas.drawText("Hello World", 5, 15, mLoadPaint);
//canvas.drawText("Hello World", 100, 100, mLoadPaint);
Bitmap tileImage = BitmapFactory.decodeResource(getResources(), R.drawable.image);
canvas.drawBitmap(tileImage, XPOS-35, 0, null);
XMAX=Float.parseFloat(""+(XPOS-35));
}
@Override
protected void onLayout(boolean arg0, int arg1, int arg2, int arg3, int arg4) {
}
@Override
public boolean onTouchEvent(MotionEvent event) {
Float x=event.getX();
Float y=event.getY();
System.out.println("Mview has been touched ---> "+x +" x "+y);
if(x > 0 && y > 0)
{
if(x > XMAX && y < YMAX){
TakeMyScreen(getContext());
}
}
return true;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
return super.onKeyDown(keyCode, event);
}
}
于 2013-01-09T07:24:27.013 に答える