0

我正在使用 Canvas- 和 Bitmap 类创建图像。我想将其设置为用户的背景。然后我想在它上面添加更多图像。

这是应该作为背景的图像的代码。

ImageView imgMap1 = (ImageView) findViewById(R.id.imgMap1);
imgMap1.setImageDrawable(new BitmapDrawable(Bitmap.createBitmap(bmp, 0, 0, 500, 500)));

这是使其成为背景的代码:

LinearLayout ll = new LinearLayout(this);
ll.setBackgroundResource(R.drawable.nn);
this.setContentView(ll);

这里的问题是:当我将它设置为背景时,我再也看不到另一张照片了。我怎样才能做到这一点?提前致谢。

其他图像被添加到布局中。它们可以通过手指触摸移动。用户可以用手指重新定位它们。

ImageView i1 = (ImageView) findViewById(R.id.Image1);
    ImageView i2 = (ImageView) findViewById(R.id.Image2);
4

2 回答 2

0

布局是在您的 XML 文件中自上而下构建的,或者按照您在代码中添加元素的顺序构建。听起来您的其他图像首先被添加到布局中,或者作为 XML 文件中的更高层元素,或者在您的代码中更早的位置。您需要添加其他代码作为完整答案的上下文。

于 2012-09-26T18:41:07.143 回答
0

刚刚注意到您可以使用See the Android ReferenceBitmap直接设置为您ImageView的内容setImageBitmap(Bitmap bm)

然后谈谈你的问题。

首先,创建自己的类扩展View; 二、使用Bitmap加载背景图和叠加图 三、调用onTouch事件,使该onDraw方法使用返回的坐标自动重绘叠加图onTouch

就像是:

public class dragndrop extends Activity {
/** Called when the activity is first created. */

@Override
public void onCreate(Bundle savedInstanceState) {

    // using this to load your background image
    BitmapFactory.Options opt = new BitmapFactory.Options();
    opt.inPreferredConfig = Bitmap.Config.RGB_565;  // this is not a must       
    bmBackground = BitmapFactory.decodeFile(filePath, opt);
    super.onCreate(savedInstanceState);
    DrawView dv = new DrawView(dragndrop.this);
    setContentView(dv);
}


public class DrawView extends View {

    Point coordinate;

    public DrawView(Context context) {
        super(context);
        setFocusable(true); //necessary for getting the touch events
    }

    @Override 
    protected void onDraw(Canvas canvas) {

        // assume you have already load your background image as bitmap
        canvas.drawBitmap(bmBackground, 0, 0, null);

    // assume bm is the overlay image you need to put on top,
        // the method here will draw the object with the coordinate you give
    canvas.drawBitmap(bm, coordinate.x, coordinate.y, null);
    }



   // events when touching the screen
    public boolean onTouchEvent(MotionEvent event) {
        int eventaction = event.getAction(); 

        int x = (int)event.getX(); 
        int y = (int)event.getY(); 

        switch (eventaction ) { 

        case MotionEvent.ACTION_DOWN: 
        // add code here to determine the point user touched is within the object or not

                    break;
                }
              }

             break; 


        case MotionEvent.ACTION_MOVE:   // touch 'n' drag 

            // pass the touch point to your object
            coordinate.x = x;
            coordinate.y = y;

            break; 

        case MotionEvent.ACTION_UP: 
            // touch drop - just do things here after dropping

             break; 
        } 
        // redraw the canvas
        invalidate(); 
        return true; 

    }


}


}

这是我自己的片段,请在使用前编辑,当您的问题得到解决时请告诉我。

于 2012-09-26T20:17:46.453 回答