我遇到了问题,我无法解决。
我正在处理像 Facebook chathead 这样的浮动视图,我无法使ImageView
可点击以使其打开黑色新活动并关闭聊天头服务。
以下是FloatingViewService
public class FloatingViewService extends Service {
private WindowManager mWindowManager;
private ImageView mImgFloatingView;
private boolean mIsFloatingViewAttached = false;
@Override
public IBinder onBind(Intent intent) {
//Not use this method
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if(!mIsFloatingViewAttached){
mWindowManager.addView(mImgFloatingView, n mImgFloatingView.getLayoutParams());
}
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onCreate() {
super.onCreate();
mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
mImgFloatingView = new ImageView(this);
mImgFloatingView.setImageResource(R.mipmap.ic_launcher);
final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.TOP | Gravity.LEFT;
mWindowManager.addView(mImgFloatingView, params);
mImgFloatingView.setOnTouchListener(new View.OnTouchListener() {
private int initialX;
private int initialY;
private float initialTouchX;
private float initialTouchY;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
initialX = params.x;
initialY = params.y;
initialTouchX = event.getRawX();
initialTouchY = event.getRawY();
return true;
case MotionEvent.ACTION_UP:
return true;
case MotionEvent.ACTION_MOVE:
params.x = initialX + (int) (event.getRawX() - initialTouchX);
params.y = initialY + (int) (event.getRawY() - initialTouchY);
mWindowManager.updateViewLayout(mImgFloatingView, params);
return true;
}
return false;
}
});
mIsFloatingViewAttached = true;
mImgFloatingView.setClickable(true);
mImgFloatingView.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Intent int1 = new Intent(FloatingViewService.this,CrniProzor.class);
startActivity(int1);
}
});
}
public void removeView() {
if (mImgFloatingView != null){
mWindowManager.removeView(mImgFloatingView);
mIsFloatingViewAttached = false;
}
}
@Override
public void onDestroy() {
Toast.makeText(getApplicationContext(), "onDestroy", Toast.LENGTH_SHORT);
super.onDestroy();
removeView();
}
}
`
和MainActivity
public class MainActivity extends ActionBarActivity implements View.OnClickListener{
private Button mBtnShowView;
private boolean mIsFloatingViewShow; //Flag variable used to identify if the Floating View is visible or not
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mBtnShowView = (Button)findViewById(R.id.btn_show_floating_view);
mBtnShowView.setOnClickListener(this);
mIsFloatingViewShow = false;
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btn_show_floating_view:
if(mIsFloatingViewShow){
hideFloatingView();
mIsFloatingViewShow = false;
mBtnShowView.setText(R.string.show_floating_view);
}
else{
showFloatingView();
mIsFloatingViewShow = true;
mBtnShowView.setText(R.string.hide_floating_view);
}
break;
}
}
private void showFloatingView() {
startService(new Intent(getApplicationContext(), FloatingViewService.class));
}
private void hideFloatingView() {
stopService(new Intent(getApplicationContext(), FloatingViewService.class));
}
}
答案 0 :(得分:0)
试试这个:
case MotionEvent.ACTION_UP:
if ((Math.abs(initialTouchX - event.getRawX()) < 5) && (Math.abs(initialTouchY - event.getRawY()) < 5)) {
Toast.makeText(FloatingViewService.this, "CLICK", Toast.LENGTH_SHORT).show();
}
return true;