有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java拖放从角落开始,而不是从最后一个位置开始

当我开始拖动图像时,它会自动移动到右角,然后开始移动。 下面是一个例子:

--从中心开始--

!![当我触摸图像时]http://i59.tinypic.com/2dbjp7d.png

!![当我移动图像时]http://i60.tinypic.com/33l1f6c.png

package com.example.smite.floater;
import 安卓.app.Service;
import 安卓.content.Intent;
import 安卓.graphics.Color;
import 安卓.graphics.PixelFormat;
import 安卓.graphics.drawable.Drawable;
import 安卓.hardware.Camera;
import 安卓.os.IBinder;
import 安卓.view.Gravity;
import 安卓.view.MotionEvent;
import 安卓.view.View;
import 安卓.view.ViewGroup;
import 安卓.view.WindowManager;
import 安卓.widget.LinearLayout;
import 安卓.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;
            }
        });
    }
}

怎么办

为什么是从角落开始,而不是从最后一个位置开始

谢谢


共 (0) 个答案