使用imageview可拖动android的自定义弹出对话框

时间:2018-02-21 04:50:32

标签: android popup draggable

我已经对本教程http://android-er.blogspot.co.id/2014/01/implement-drag-and-drop-movable.html进行了一些修改。我想在其上显示图像并使弹出窗口可拖动。

现在它的工作。但问题是图像无法移动到屏幕的角落。谁能给我一个关于这个问题的解决方案?任何建议将不胜感激

这是我的布局

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rootView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">


<ImageView
    android:id="@+id/imgResult"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"/>


<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/dismiss"
    android:paddingTop="16dp"
    android:text="close"/>
</LinearLayout>

这是我的活动课

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final Button btnOpenPopup = (Button) findViewById(R.id.openpopup);
    btnOpenPopup.setOnClickListener(new Button.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            LayoutInflater layoutInflater = 
                    (LayoutInflater)getBaseContext()
                    .getSystemService(LAYOUT_INFLATER_SERVICE);
            View popupView = layoutInflater.inflate(R.layout.popup, null);
            final PopupWindow popupWindow = new PopupWindow(
                    popupView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

            Button btnDismiss = (Button)popupView.findViewById(R.id.dismiss);
            ImageView imageView = (ImageView) popupView.findViewById(R.id.imgResult);
            int imageResource = getResources().getIdentifier("@drawable/toy", null, getPackageName());

            Drawable res = getResources().getDrawable(imageResource);
            imageView.setImageDrawable(res);

            btnDismiss.setOnClickListener(new Button.OnClickListener(){

                @Override
                public void onClick(View v) {
                    popupWindow.dismiss();
                }});

            popupWindow.showAsDropDown(btnOpenPopup, 50, -30);

            popupView.setOnTouchListener(new OnTouchListener() {
                int orgX, orgY;
                int offsetX, offsetY;

                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        orgX = (int) event.getX();
                        orgY = (int) event.getY();
                        break;
                    case MotionEvent.ACTION_MOVE:
                        offsetX = (int)event.getRawX() - orgX;
                        offsetY = (int)event.getRawY() - orgY;
                        popupWindow.update(offsetX, offsetY, -1, -1, true);
                        break;
                    }
                    return true;
                }});
        }

    });
}

}

0 个答案:

没有答案