Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在android中拖动/移动视图组_Android_Gesture_Android Viewgroup - Fatal编程技术网

在android中拖动/移动视图组

在android中拖动/移动视图组,android,gesture,android-viewgroup,Android,Gesture,Android Viewgroup,我有一个视图组,当用户长按[code>circleMenu时,我想用手指在屏幕上移动它。如何移动视图组 以下是java: public class ViewService extends Service implements OnItemSelectedListener, OnItemClickListener, OnRotationFinishedListener, OnCenterClickListener, OnLongClickListener { private Window

我有一个视图组,当用户长按[code>circleMenu时,我想用手指在屏幕上移动它。如何移动
视图组

以下是java:

public class ViewService extends Service implements OnItemSelectedListener,
OnItemClickListener, OnRotationFinishedListener, OnCenterClickListener, OnLongClickListener {

    private WindowManager windowManager;
    CircleLayout circleMenu;
    CircleImageView ciw1, ciw2, ciw3, ciw4;

    @Override public IBinder onBind(Intent intent) {
        // Not used
        return null;
    }

    @Override public void onCreate() {
        super.onCreate();

        //windowsmanager

        windowManager = (WindowManager) getSystemService("window");

        final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_PHONE,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
            PixelFormat.TRANSLUCENT
        );

        params.gravity = Gravity.CENTER | Gravity.LEFT;
        params.x = 0;
        params.y = 0;


        //layout+circleMenu
        LayoutInflater li = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
        View baseview = li.inflate(R.layout.activity_main, null);

        circleMenu = (CircleLayout) baseview.findViewById(R.id.main_circle_layout);

        ciw1 = new CircleImageView(this);
        ciw1.setBackgroundResource(R.drawable.twitter);
        ciw2 = new CircleImageView(this);
        ciw2.setBackgroundResource(R.drawable.whatsapp);
        ciw3 = new CircleImageView(this);
        ciw3.setBackgroundResource(R.drawable.cam);
        ciw4 = new CircleImageView(this);
        ciw4.setBackgroundResource(R.drawable.sms);

        ciw1.setId(1);
        ciw2.setId(2);
        ciw3.setId(3);
        ciw4.setId(4);
        circleMenu.addView(ciw1);
        circleMenu.addView(ciw2);
        circleMenu.addView(ciw3);
        circleMenu.addView(ciw4);

        windowManager.addView(baseview, params);

    }

    @Override
    public boolean onLongClick(View v) {

        return true;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }


    @Override
    public void onItemSelected(View view, String name) {

        switch (view.getId()) {

        }
    }

    @Override
    public void onItemClick(View view, String name) {


        switch (view.getId()) {
            case 1:
                Toast.makeText(getApplicationContext(), "twit", Toast.LENGTH_SHORT).show();

                break;
            case 2:
                Toast.makeText(getApplicationContext(), "what", Toast.LENGTH_SHORT).show();
                break;
            case 3:
                Toast.makeText(getApplicationContext(), "cam", Toast.LENGTH_SHORT).show();
                break;
            case 4:
                Toast.makeText(getApplicationContext(), "sms", Toast.LENGTH_SHORT).show();
                break;

        }
    }

    @Override
    public void onCenterClick() {
        Toast.makeText(getApplicationContext(), R.string.center_click,
            Toast.LENGTH_SHORT).show();


    }

    @Override
    public void onRotationFinished(View view, String name) {
        Animation animation = new RotateAnimation(0, 360, view.getWidth() / 2,
            view.getHeight() / 2);
        animation.setDuration(250);
        view.startAnimation(animation);
    }
}
以下是XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:circle="http://schemas.android.com/apk/res/lazy.launcher"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" ">

<package.ViewGroup.CircleLayout
    android:id="@+id/main_circle_layout"
    android:layout_width="200dp"
    android:layout_height="200dp"
    android:layout_marginLeft="-80dp"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    circle:firstChildPosition="East"
    circle:isRotating="true"
    circle:rotateToCenter="true"
    circle:speed="75" >

</package.ViewGroup.CircleLayout>

<ImageView
    android:id="@+id/toggle"
    android:layout_width="35dp"
    android:layout_height="35dp"
    android:layout_alignParentLeft="true"
    android:layout_marginTop="80dp"
    android:gravity="center"
    android:src="@drawable/ic_launcher" />
查看Android API演示中的“视图/拖放”演示。查看
DraggableDot.java
。您可以结合使用现有内容和视图.setTranslationx()/
视图.setTranslationY()

试试这个 在
相对视图的内部
放置一个
框架布局
并用于移动该
视图

xml代码

<FrameLayout
      android:id="@+id/imageHolder"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignParentLeft="true"
      android:layout_alignParentTop="true"
      android:layout_marginLeft="-80dp" >

<package.ViewGroup.CircleLayout
    android:id="@+id/main_circle_layout"
    android:layout_width="200dp"
    android:layout_height="200dp"
    circle:firstChildPosition="East"
    circle:isRotating="true"
    circle:rotateToCenter="true"
    circle:speed="75" >

</package.ViewGroup.CircleLayout>
</FrameLayout>
circleLayout.setOnTouchListener(new View.OnTouchListener() {
            private int left, top;
            private int parentLeft, parentTop;

            @Override
            public boolean onTouch(View v, MotionEvent event) {

                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        parentLeft = imageHolder.getLeft();
                        parentTop = ((ViewGroup) imageHolder.getParent()).getTop();
                        left = (int) event.getRawX() - v.getLeft() - parentLeft;
                        top = (int) event.getRawY() - v.getTop() - parentTop;
                        break;
                    case MotionEvent.ACTION_MOVE:
                        int leftMargin = (int) (event.getRawX() - left - parentLeft);
                        int topMargin = (int) (event.getRawY() - top - parentTop);

                        FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) v.getLayoutParams();
                        if (leftMargin >= 0 && leftMargin + v.getWidth() <= imageHolder.getWidth())
                            params.leftMargin = leftMargin;
                        if (topMargin >= 0 && topMargin + v.getHeight() <= imageHolder.getHeight())
                            params.topMargin = topMargin;

                        params.gravity = Gravity.NO_GRAVITY;
                        v.setLayoutParams(params);

                        break;
                }

                return true;
            }
        });

java代码

<FrameLayout
      android:id="@+id/imageHolder"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignParentLeft="true"
      android:layout_alignParentTop="true"
      android:layout_marginLeft="-80dp" >

<package.ViewGroup.CircleLayout
    android:id="@+id/main_circle_layout"
    android:layout_width="200dp"
    android:layout_height="200dp"
    circle:firstChildPosition="East"
    circle:isRotating="true"
    circle:rotateToCenter="true"
    circle:speed="75" >

</package.ViewGroup.CircleLayout>
</FrameLayout>
circleLayout.setOnTouchListener(new View.OnTouchListener() {
            private int left, top;
            private int parentLeft, parentTop;

            @Override
            public boolean onTouch(View v, MotionEvent event) {

                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        parentLeft = imageHolder.getLeft();
                        parentTop = ((ViewGroup) imageHolder.getParent()).getTop();
                        left = (int) event.getRawX() - v.getLeft() - parentLeft;
                        top = (int) event.getRawY() - v.getTop() - parentTop;
                        break;
                    case MotionEvent.ACTION_MOVE:
                        int leftMargin = (int) (event.getRawX() - left - parentLeft);
                        int topMargin = (int) (event.getRawY() - top - parentTop);

                        FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) v.getLayoutParams();
                        if (leftMargin >= 0 && leftMargin + v.getWidth() <= imageHolder.getWidth())
                            params.leftMargin = leftMargin;
                        if (topMargin >= 0 && topMargin + v.getHeight() <= imageHolder.getHeight())
                            params.topMargin = topMargin;

                        params.gravity = Gravity.NO_GRAVITY;
                        v.setLayoutParams(params);

                        break;
                }

                return true;
            }
        });
circleLayout.setOnTouchListener(新视图.OnTouchListener(){
私有int左,顶部;
private int parentLeft,parentTop;
@凌驾
公共布尔onTouch(视图v,运动事件){
开关(event.getAction()){
case MotionEvent.ACTION\u DOWN:
parentLeft=imageHolder.getLeft();
parentTop=((视图组)imageHolder.getParent()).getTop();
left=(int)event.getRawX()-v.getLeft()-parentLeft;
top=(int)event.getRawY()-v.getTop()-parentTop;
打破
case MotionEvent.ACTION\u移动:
int leftMargin=(int)(event.getRawX()-left-parentLeft);
int-topMargin=(int)(event.getRawY()-top-parentTop);
FrameLayout.LayoutParams params=(FrameLayout.LayoutParams)v.getLayoutParams();

如果(leftMargin>=0&&leftMargin+v.getWidth()=0&&topMargin+v.getHeight(),那么您在java代码中输入的
imageHolder
是什么?不是FrameLayout?@0x00FF:ya这是
FrameLayout
非常感谢您的努力,我希望我能完成其余的工作。我正在检查。谢谢。