繁体   English   中英

onClick时如何更改imageButton的位置

[英]How to change the position of a imageButton when onClick

我试图在单击时移动图像按钮的位置。 我尝试了以下操作,但是在“ rlOut.addView(imgP,p);”处崩溃了。 在onCreate()中运行它们时,我没有任何问题。

公共类Delet3Activity扩展了Activity {

RelativeLayout rlOut;
ImageButton imbBtn;

EditText et1, et2;
ImageView ivB;
ImageButton imgP;
RelativeLayout.LayoutParams p;
RelativeLayout.LayoutParams params;

int mX, mY;

@Override

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);

et1 = (EditText)findViewById(R.id.et1);
et2 = (EditText)findViewById(R.id.et2);

imbBtn = (ImageButton)findViewById(R.id.imgBtn);
rlOut = (RelativeLayout)findViewById(R.id.rlOut);
imgP = (ImageButton)findViewById(R.id.imgP);

ivB = new ImageView(this);
ivB.setBackgroundColor(Color.RED);

Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth();
int height = display.getHeight();

width = width/2-62;
height = height/2-62;
p = new RelativeLayout.LayoutParams(62, 62);    

imbBtn.setOnTouchListener(new View.OnTouchListener() {



    public boolean onTouch(View v, MotionEvent event) {
        // TODO Auto-generated method stub
        LayoutParams par = (LayoutParams)imbBtn.getLayoutParams();

        if(event.getAction()==MotionEvent.ACTION_DOWN)
        {
            Log.d("ok","down");
            mX = (int) event.getX() - imbBtn.getWidth() / 2;
            mY = (int) event.getY() - imbBtn.getHeight() / 2;
            et1.setText("mX down: "+String.valueOf(mX));
            et2.setText("mY down: "+String.valueOf(mY));


        }
        else if (event.getAction()==MotionEvent.ACTION_UP)
        {
            Log.d("ok","up");
            rlOut.addView(ivB, params);
            p.leftMargin=4;
            params.leftMargin = 60;
            params.topMargin = 20;
            rlOut.addView(imgP, p);
            Log.d("ok","p");
        }
        else if (event.getAction()==MotionEvent.ACTION_MOVE)
        {
            Log.d("ok","move");
            mX = (int) event.getX() - imbBtn.getWidth() / 2;
            mY = (int) event.getY() - imbBtn.getHeight() / 2;
            et1.setText("mX move: "+String.valueOf(mX));
            et2.setText("mY move: "+String.valueOf(mY));
        }
        return false;
    }
});

}}

OnCreate方法是设置setContentView(R.layout.main) 我想变量rlOut代表RelativeLayout ,它可能在您的主布局中。 设置contentView并使用findViewById 初始化变量rlOut后,在OnCreate方法中调用上述函数。 或者,如果变量rlOut在其他布局文件中,则您必须首先使用布局充气工具为该布局充气,然后使用findViewById方法查找视图。

希望这可以帮助。

编辑

以下代码可能是您正在寻找的解决方案:

imbBtn.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            LayoutParams par = (LayoutParams)imbBtn.getLayoutParams();

            if (event.getAction()==MotionEvent.ACTION_MOVE)
            {
                Log.d("ok","move");
                mX = (int) event.getX() - imbBtn.getWidth() / 2;
                mY = (int) event.getY() - imbBtn.getHeight() / 2;
                par.leftMargin = imbBtn.getLeft() + mX;
                par.topMargin = imbBtn.getTop() + mY;
                imbBtn.setLayoutParams(par);
                et1.setText("mX move: "+String.valueOf(mX));
                et2.setText("mY move: "+String.valueOf(mY));
            }
            return false;
        }
    });

MotionEvent.ACTION_MOVE是您需要捕获的唯一事件。 希望此解决方案对您有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM