8

私のアプリは、特定の時間に TYPE_SYSTEM_ALERT としてユーザーにボタンを表示し、ユーザーがそれを移動できるようにしようとしています。タッチして移動するアクションは以下のコードで登録されますが、ボタンは移動しません。私は何が欠けていますか?

    //create button
    mbtRec = new Button(ACR.getContext()); 
    mbtRec.setText(R.string.start_recording);
    mbtRec.setTypeface(null, Typeface.BOLD);
    mbtRec.setBackgroundColor(Color.RED);       //mbtRec.setBackgroundResource(R.drawable.ic_launcher); 
    mbtRec.setOnClickListener(recButtonOnClickListener);
    mbtRec.setOnTouchListener(recButtonOnTouchListener);
    //create layout params
    recButtonLayoutParams = new WindowManager.LayoutParams();
    recButtonLayoutParams.flags = WindowManager.LayoutParams.FORMAT_CHANGED; //8
    recButtonLayoutParams.format = PixelFormat.RGBA_8888; //PixelFormat.TRANSLUCENT
    recButtonLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
    recButtonLayoutParams.gravity = Gravity.TOP | Gravity.CENTER; //51
    recButtonLayoutParams.width = WindowManager.LayoutParams.FILL_PARENT;
    recButtonLayoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
    paramWindowManager.addView(this.mbtRec, recButtonLayoutParams);


OnTouchListener recButtonOnTouchListener = new View.OnTouchListener() {
        @TargetApi(Build.VERSION_CODES.FROYO)
        @Override
        public boolean onTouch(View v, MotionEvent event) {
             switch(event.getActionMasked())
                {
                    case MotionEvent.ACTION_DOWN:
                        Tools.Log("Drag", "Started Dragging");
                        break;
                    case MotionEvent.ACTION_UP:
                        Tools.Log("Drag", "Stopped Dragging");
                        break;
                    case MotionEvent.ACTION_MOVE:
                        Tools.Log("Drag", "Dragging");


                        recButtonLayoutParams.x =(int) event.getRawX();
                        recButtonLayoutParams.y= (int) event.getRawY();


                        mbtRec.setLayoutParams(recButtonLayoutParams);
                        mbtRec.invalidate();

                        break;
                    default:
                        break;
                }
                return false;
        }               
    };
4

5 に答える 5

3

私は似たようなことをしていますが、marginLeft と marginTop を使用しています。レイアウトを変更した後、呼び出す必要があります

 windowManager.updateViewLayout(recButton, recButtonLayoutParams);
于 2013-06-14T15:42:52.677 に答える
1

mbtRec.postInvalidate()代わりに使用し、削除する必要があると思いますgravity

于 2013-06-12T20:52:14.903 に答える
1

画面に合わせてボタンを設定します

recButtonLayoutParams.width = WindowManager.LayoutParams.FILL_PARENT;

したがって、x 方向には移動できません。

親がコンテンツをラップするように設定されていない限り、Y 方向に移動できるはずですが、ブロックされます。

私が見たものは、これがお役に立てば幸いです。

于 2013-06-16T08:04:48.817 に答える