当我开始拖动图像时,它会自动转到右上角,而不是开始移动。 这是例子:
- 从中心开始 -
![当我触摸图片时] http://i59.tinypic.com/2dbjp7d.png
![当我移动图片时] http://i60.tinypic.com/33l1f6c.png
package com.example.smite.floater;
import android.app.Service;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.PixelFormat;
import android.graphics.drawable.Drawable;
import android.hardware.Camera;
import android.os.IBinder;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.LinearLayout;
import android.widget.Toast;
public class floatingwindow extends Service{
private WindowManager wm;
private LinearLayout ll;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
wm = (WindowManager)getSystemService(WINDOW_SERVICE);
ll = new LinearLayout(this);
LinearLayout.LayoutParams llParameters = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT);
ll.setBackgroundResource(R.mipmap.floatbutton2);
ll.setLayoutParams(llParameters);
final WindowManager.LayoutParams parameters = new WindowManager.LayoutParams(75,75,WindowManager.LayoutParams.TYPE_PHONE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT);
parameters.x=0;
parameters.y=0;
parameters.gravity= Gravity.CENTER | Gravity.CENTER;
wm.addView(ll , parameters);
ll.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(), "clicked", Toast.LENGTH_LONG).show();
}
});
ll.setOnTouchListener(new View.OnTouchListener() {
private WindowManager.LayoutParams updatedParameters = parameters;
int x , y;
float touchedX , touchedY;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
x = updatedParameters.x;
y = updatedParameters.y;
touchedX = event.getX();
touchedY = event.getY();
break;
case MotionEvent.ACTION_MOVE:
updatedParameters.x = (int)(x + (event.getRawX() - touchedX));
updatedParameters.y = (int)(y + (event.getRawY() - touchedY));
wm.updateViewLayout(ll, updatedParameters);
default:
break;
}
return false;
}
});
}
}
怎么做??
为什么它从角落开始而不是从最后一个位置开始?
感谢