Reputation: 163
I'm trying to start a new activity when the screen is touched.The background is a resized bitmap. But the touch is not detected. Here's my code:
public class DispCover extends Activity implements OnTouchListener{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
bg = new DispCoverG(this);
setContentView(bg);
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
bg.pause();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
bg.resume();
}
float dtp(float dp,Context context){
Resources resources = context.getResources();
DisplayMetrics metrics = resources.getDisplayMetrics();
float px = dp * (metrics.densityDpi/160f);
return px;
}
@Override
public boolean onTouch(View v, MotionEvent e) {
int action = e.getAction();
int xd = (int) e.getX();
int yd = (int) e.getY();
int x = (int) dtp(xd,this);
int y = (int) dtp(yd,this);
switch(action){
case MotionEvent.ACTION_DOWN:
startActivity(new Intent(//));
break;
}
return true;
}
public class DispCoverG extends SurfaceView implements Runnable{
public DispCoverG(Context context) {
//code
}
public Bitmap getResizedBitmap(Bitmap bm, int newHeight, int newWidth)
{
//code
}
public void pause(){
//code
}
public void resume(){
//code
}
@Override
public void run() {
//code
}
}
}
};
Thanks in advance.
Upvotes: 1
Views: 3218
Reputation: 7888
write the below code under setContentView(bg);
bg.setOnTouchListener(this);
OR
bg.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
int action = event.getAction();
switch(action){
case MotionEvent.ACTION_DOWN:
startActivity(new Intent(YourActivity.this,NewActivity.class));
break;
}
return true;
}
});
implement OnTouchListener
in Activity.
Upvotes: 4
Reputation: 364
Another approach would be to catch the MotionEvents directly in your view:
public class DispCoverG extends SurfaceView implements Runnable{
....
@Override
public boolean onTouchEvent(MotionEvent event){
// to dispatch click / long click event,
// you must pass the event to it's default callback View.onTouchEvent
boolean defaultResult = super.onTouchEvent(event);
...
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
Intent intent = new Intent(DispCover.this, XActivity.class);
startActivity(intent);
break;
}
return defaultResult;
//return true; //this should work if you need just ACTION_DOWN
}
}
Upvotes: 0