Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to disable background screen after alertdialog appear or enable only alertdialog?

I have a game after game over, I am save the score and name using alertdialog into database,its fine but when I click any where on game window alertdialog closed and again game is working for that I need disable game window after game is over or alertdialog never closed event I click on game window.

my code is:

mainactivity:

public class MainActivity extends Activity {

static TextView editText;
static int score=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);     
     editText=(TextView) findViewById(R.id.editText1);
     //editText.setText(""+score);
     Button button=(Button) findViewById(R.id.button1);
     button.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            new AnimatedView(MainActivity.this).pauseClicked();
        }
    });
}
public static void setCount(int count) {

    //new MainActivity().onCreate(null);
    score=count;
    editText.setText(""+score);
}

Animatedview:

public class AnimatedView extends ImageView{

String name;
static int count=0;
private Context mContext;
int x = 130;
int y = 450;
private float a,b;
private int xVelocity = 20;
private int yVelocity = 20;
private Handler h;
private final int FRAME_RATE = 25;
BitmapDrawable ball;
boolean touching;
boolean dm_touched = false;
float move=3;
int bm_x = 0, bm_y = 0, bm_offsetx, bm_offsety,bm_w,bm_h;
boolean paused;
private Paint line, ball1, background;
static int click=0;
private static final int TEXT_ID = 0;
DBCeation dbCeation;
public AnimatedView(Context context) {
    super(context);
}
public AnimatedView(Context context, AttributeSet attrs)  {  
    super(context, attrs);  
    mContext = context; 
    h = new Handler();
} 

private Runnable r = new Runnable() {
    @Override
    public void run() {
        //Log.e("game","run called");
        if(touching = true)
        invalidate(); 
    }
};


@Override
protected void onDraw(Canvas c) {  
    BitmapDrawable ball = (BitmapDrawable) mContext.getResources().getDrawable(R.drawable.ball);  
    if (x<0 && y <0) {
        //x = this.getWidth()/2;
        y = c.getHeight()/2;


    } else {
        //Log.d("s",""+xVelocity);
        Log.d("s",""+yVelocity);
        x += xVelocity;
        y += yVelocity;
        if ((x > this.getWidth() - ball.getBitmap().getWidth()) || (x < 0)) {
            xVelocity = xVelocity*-1;
        }
        if (y >( this.getHeight() - ball.getBitmap().getHeight()) ||y <0) {
            yVelocity = yVelocity*-1;
        }
    }
    c.drawBitmap(ball.getBitmap(), x, y, null);  
   //Log.e("sarat",""+touching);

  if(click>=2){
  if(bm_h+y>630){

       final EditText input=new EditText(mContext);
      Toast.makeText(getContext(),"game over",Toast.LENGTH_SHORT).show(); 
      AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
      builder.setTitle("Game Is Over");
        builder.setMessage("Enter your Name");
         // Use an EditText view to get user input.
         input.setId(TEXT_ID);
         builder.setView(input);
         builder.setPositiveButton("save", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                // TODO Auto-generated method stub

                name=input.getText().toString();
                Log.d("name",""+name);
                int score=MainActivity.score;
                dbCeation=new DBCeation(mContext);
                dbCeation.insertValues(name, score);
                Intent intent=new Intent(mContext,Home.class);
                click=0;
                mContext.startActivity(intent);
            }
        });
      builder.setIcon(R.drawable.ic_launcher);


      builder.show();
      x=150;
      y=200;
      xVelocity=0;
      yVelocity=0;

  }}
    if(touching){
         // Log.e("game","iftouch called called");
        h.postDelayed(r, FRAME_RATE);    
        bm_w=ball.getBitmap().getWidth();
        bm_h=ball.getBitmap().getHeight();
      }
  }
public void pauseClicked()
{   
    xVelocity=0;
    yVelocity=0;
    invalidate(xVelocity, yVelocity, 0, 0);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
    // Log.d("game","ontouch called");
    int touchType = event.getAction();

     switch(touchType){
        case MotionEvent.ACTION_MOVE: 
            a = event.getX();
            b = event.getY();
            touching = true;

           /* if (dm_touched) {
                x = (int) a - bm_offsetx;
                y = (int) b - bm_offsety;
            }*/
            //invalidate();
            break;

         case MotionEvent.ACTION_DOWN: 
             //x and y give you your touch coordinates
              a = event.getX();
              b = event.getY();
              touching = true;
              if(a>x+20&&a<330&&b<=y+320&&b>y){
                     click++;
                     Log.d("click",""+click);
                 invalidate();
                 touching=true;}
             /* if (touching) {
                    // paused = true;
                    h.removeCallbacks(r);
                    touching = false;
                } else {
                    touching = true;
                }*/
              //Log.d("game","action_down called");
              Log.e("s",""+ a);
              Log.e("s",""+ b);
              Log.e("s",""+ x);
              Log.e("s",""+ y);
              Log.e("s",""+ bm_w);
              Log.e("s",""+ bm_h);
              if ((a > x) && (a < bm_w + x) && (b > y) && (b < bm_h + y)) { 
                  count++;
                MainActivity.setCount(count);
                  //invalidate();
                  Log.i("score",""+count);

                }
              if (dm_touched) {
                  if ((a > x) && (a < bm_w + x) && (b > y) && (b < bm_h + y)) { 
                  move+=2;
                    //x = (int) a - bm_offsetx;
                  y = (int) (yVelocity*-1);

                  //invalidate();

                }}
               // dm_touched = true;
         case MotionEvent.ACTION_UP:
             a = event.getX();
              b = event.getY();
            /* if(a>x+20&&a<330&&b<=y+320&&b>y){
                 click++;
                 Log.d("click",""+click);
             invalidate();
             touching=true;}*/
             if ((a > x) && (a < bm_w + x) && (b > y) && (b < bm_h + y)) { 
                Log.e("game","clicked");
            }

            default:

                dm_touched = true;
            }

            return true;
}

@Override
public void destroyDrawingCache() {

    count=0;
    click=0;
    super.destroyDrawingCache();
}

}

like image 326
kumar Avatar asked Feb 12 '14 06:02

kumar


People also ask

How do I turn off AlertDialog on Android?

AlertDialog generally consists of the main title, the message, and two buttons, technically termed as a positive button and a negative button. Both positive and negative buttons can be programmed to perform various actions. By default, the negative button lets close the AlertDialog without any additional lines of code.

How do you dismiss dialog with click on outside of dialog?

By default, dialog can be closed by pressing Esc key and clicking the close icon on the right of dialog header. It can also be closed by clicking outside of the dialog using hide method. Set the CloseOnEscape property value to false to prevent closing of the dialog when pressing Esc key.

How many buttons can an AlertDialog display?

AlertDialog. A dialog that can show a title, up to three buttons, a list of selectable items, or a custom layout.


2 Answers

You can use its cancallable method like below,

builder.setCancelable(false);
like image 163
user3291365 Avatar answered Oct 24 '22 22:10

user3291365


You can use the setCanceledOnTouchOutside(false) method of AlertDialog if you want to prevent the AlertDialog from closing on window click but still want to be able to close it on back button click.

like image 45
Apoorv Avatar answered Oct 24 '22 23:10

Apoorv