Android addView和removeView在同一个方法中

时间:2017-12-14 14:29:50

标签: android imageview

我正在调用这个方法,它应该在每个调用中给出的位置重绘一个指针。

ImageView ivPointer=null;
public void moveCursor(Bitmap bmPuntero, int x, int y)
{
    RelativeLayout rl = (RelativeLayout) findViewById(R.id.gamelayout);

    if (ivPointer!=null)
        rl.removeView(ivPointer);


    ivPointer = new ImageView(this);

    ivPointer.setImageBitmap(bmPuntero);
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(65, 65);
    params.leftMargin = x;
    params.topMargin = y;
    rl.addView(ivPointer, params);

}

结果是未显示位图。如果删除删除视图的行,我会看到多次绘制位图的位置,因此添加部分应该是正确的。

1 个答案:

答案 0 :(得分:1)

试试这个:

{
   // Somewhere (in onCreate of the Activity for example):

   RelativeLayout rl = (RelativeLayout) findViewById(R.id.gamelayout);
   ImageView ivPointer = initPointer(this, bmPuntero); // Get image from somewhere
   rl.addView(ivPointer);
}


// To update the cursor's po
public static void moveCursor(ImageView pointer, int x, int y) {
    RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) pointer.getLayoutParams();
    params.leftMargin = x;
    params.topMargin = y;

    pointer.setLayoutParams(params);
    pointer.requestLayout(); // Refresh the layout
}

// Call this method to initialise the pointer (in onCreate of your Activity
// for example)
public static ImageView initPointer(Context context, Bitmap bmp) {
    // Define the LayoutParams
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(65, 65);
    params.leftMargin = DEFAULT_POS_X; // TODO: Constants to be defined
    params.topMargin = DEFAULT_POS_Y;

    // Init the ImageView
    ImageView pointer = new ImageView(context);
    pointer.setImageBitmap(bmp);
    pointer.setLayoutParams(params);

    return pointer;
}