i tried to make an independent code to check if menu will appear and it appeared on other programs but in this code, it does not appear, what could be the problem?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
dp = new Panel(this);
dp.setOnTouchListener(this);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
requestWindowFeature(Window.FEATURE_NO_TITLE);
mPaint = new Paint();
mPaint.setDither(true);
mPaint.setColor(Color.BLACK);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeJoin(Paint.Join.MITER);
mPaint.setStrokeCap(Paint.Cap.BUTT);
mPaint.setStrokeWidth(5);
//set framelayout for the head layout
fl = new FrameLayout(this);
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_APPLICATION,
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,
PixelFormat.TRANSLUCENT);
fl.addView(dp,LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);
this.getWindowManager().addView(fl , lp);
//cancel button
Button cancel = new Button(this);
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams( LayoutParams.MATCH_PARENT, 75 );
params.bottomMargin =LayoutParams.MATCH_PARENT ;
params.gravity =Gravity.BOTTOM;
params.leftMargin =LayoutParams.MATCH_PARENT;
params.gravity =Gravity.BOTTOM;
cancel.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT));
fl.addView(cancel, params);
cancel.setOnClickListener(new ButtonClickHandlerCancel());
//save button
Button save = new Button(this);
FrameLayout.LayoutParams params2 = new FrameLayout.LayoutParams( LayoutParams.MATCH_PARENT, 75 );
params2.topMargin = LayoutParams.MATCH_PARENT;
params2.gravity =Gravity.BOTTOM;
params2.rightMargin = LayoutParams.MATCH_PARENT;
params2.bottomMargin = 75;
params2.gravity =Gravity.BOTTOM;
save.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT));
fl.addView(save, params2);
save.setOnClickListener(new ButtonClickHandlerSave());
//aesthetics for cancel button
StateListDrawable states = new StateListDrawable();
states.addState(new int[] {android.R.attr.state_pressed},
getResources().getDrawable(R.drawable.cpressed));
states.addState(new int[] {android.R.attr.state_focused},
getResources().getDrawable(R.drawable.cunpressed));
states.addState(new int[] { },
getResources().getDrawable(R.drawable.cpressed));
cancel.setBackgroundDrawable(states);
//aesthetics for save button
StateListDrawable states2 = new StateListDrawable();
states2.addState(new int[] {android.R.attr.state_pressed},
getResources().getDrawable(R.drawable.spressed));
states2.addState(new int[] {android.R.attr.state_focused},
getResources().getDrawable(R.drawable.sunpressed));
states2.addState(new int[] { },
getResources().getDrawable(R.drawable.spressed));
save.setBackgroundDrawable(states2);
}
@Override public boolean onCreateOptionsMenu(Menu menu){ MenuInflater inflater = getMenuInflater(); inflater.inflate(R.layout.menu, menu); return true;
} @Override public boolean onOptionsItemSelected(MenuItem item){ switch(item.getItemId()){ case R.id.eraser:
mPaint = new Paint(); mPaint.setDither(true); mPaint.setColor(Color.TRANSPARENT); mPaint.setStyle(Paint.Style.STROKE); mPaint.setStrokeJoin(Paint.Join.ROUND); mPaint.setStrokeCap(Paint.Cap.BUTT); mPaint.setStrokeWidth(5); break; case R.id.paint: mPaint = new Paint(); mPaint.setDither(true); mPaint.setColor(Color.BLACK); mPaint.setStyle(Paint.Style.STROKE); mPaint.setStrokeJoin(Paint.Join.MITER); mPaint.setStrokeCap(Paint.Cap.BUTT); mPaint.setStrokeWidth(5); break; } return true; }
//when cancel button is pressed
public class ButtonClickHandlerCancel implements View.OnClickListener {
public void onClick(View view) {
Intent intent = new Intent(MaleLayout.this,
BillysCrownMain.class);
startActivity(intent);
MaleLayout.this.finish();
}
}
//when save button is pressed
public class ButtonClickHandlerSave implements View.OnClickListener {
public void onClick(View view) {
dp.saveScreenshot();
}
}
//automatically created from panel
@Override
protected void onPause() {
super.onPause();
dp.pause();
}
//automatically created from panel
@Override
protected void onResume() {
super.onResume();
dp.resume();
}
//setting the path of paint based on finger touch
@Override
public boolean onTouch(View v, MotionEvent me) {
synchronized(pointsToDraw)
{
if(me.getAction() == MotionEvent.ACTION_DOWN){
path = new Path();
path.moveTo(me.getX(), me.getY());
pointsToDraw.add(path);
}else if(me.getAction() == MotionEvent.ACTION_MOVE){
path.lineTo(me.getX(), me.getY());
}else if(me.getAction() == MotionEvent.ACTION_UP){
}
}
return true;
}
//the panel where the paint will be created
public class Panel extends SurfaceView implements Runnable{
public Panel(Context context) {
super(context);
holder = getHolder();
}
@Override
public void run() {
while( isItOk == true){
if(!holder.getSurface().isValid()){
continue;
}
holder.setFormat(PixelFormat.TRANSLUCENT);
c = holder.lockCanvas();
onDraw(c);
holder.unlockCanvasAndPost(c);
}
}
//the canvas where paint is drawn and background set
@Override
protected void onDraw(Canvas canvas) {
Bitmap bMap = BitmapFactory.decodeResource(getResources(), R.drawable.malehead);
Bitmap bMapScaled = Bitmap.createScaledBitmap(bMap, fl.getWidth(), fl.getHeight()-150, true);
c.drawBitmap(bMapScaled,0,0,null);
super.onDraw(canvas);
synchronized(pointsToDraw)
{
for (Path path : pointsToDraw)
{
canvas.drawPath(path, mPaint);
}
}
}
public void pause(){
isItOk = false;
while(true){
try{
t.join();
}catch(InterruptedException e){
e.printStackTrace();
}
break;
}
t = null;
}
public void resume(){
isItOk = true;
t = new Thread(this);
t.start();
}
//saving the file
public void saveScreenshot() {
if (ensureSDCardAccess()) {
Bitmap bMap = BitmapFactory.decodeResource(getResources(), R.drawable.malehead);
Bitmap bMapScaled = Bitmap.createScaledBitmap(bMap, fl.getWidth(), fl.getHeight()-150, true);
Canvas canvas = new Canvas(bMapScaled);
onDraw(canvas);
File file = new File(mScreenshotPath + "/" + System.currentTimeMillis() + ".jpg");
FileOutputStream fos;
try {
fos = new FileOutputStream(file);
Toast.makeText(MaleLayout.this, "Image saved at: " + file.getAbsolutePath(), Toast.LENGTH_SHORT).show();
bMapScaled.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.close();
} catch (FileNotFoundException e) {
Log.e("Panel", "FileNotFoundException", e);
} catch (IOException e) {
Log.e("Panel", "IOEception", e);
}
}
}
private boolean ensureSDCardAccess() {
File file = new File(mScreenshotPath);
if (file.exists()) {
return true;
} else if (file.mkdirs()) {
return true;
}
return false;
}
}