设置OnClickListener以查看绘制Canvas绘制的位图

时间:2011-07-14 18:06:32

标签: android image view bitmap android-canvas

我没有抓住解决问题的方法。

我已在屏幕上手动放置了两张图像。我想为每个事件处理onClick事件。 通过以下方法,OnClick Handler似乎仅对后台有效。 实际上,所有创建的子视图/成像器及其onClickListener都会对它们绘制的父级做出反应。 AndroidManifext.xml只是没有子标签的RelativeLayout。

public class Main extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        final Imager theUpperImage = new Imager( R.drawable.img1, -25, -100, new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Toast.makeText( v.getContext(), "Upper", Toast.LENGTH_SHORT).show();
            }
        });

        addContentView( theUpperImage, new View.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

        final Imager theLowerImage = new Imager( R.drawable.img2, -25, +50, new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Toast.makeText( v.getContext(), "Lower", Toast.LENGTH_SHORT).show();
            }
        });

        addContentView( theLowerImage, new View.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    }

    class Imager extends View {

        final int resImage;
        final int centerOffsetX, centerOffsetY;

        public Imager(int inResImage, int inCenterOffsetX, int inCenterOffsetY, View.OnClickListener inOnClickListener) {
            super( Main.this );
            resImage = inResImage;
            centerOffsetX = inCenterOffsetX;
            centerOffsetY = inCenterOffsetY;
            super.setOnClickListener( inOnClickListener );
        }

        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);

            final Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resImage);
            final int x = (canvas.getWidth()/2)+centerOffsetX;
            final int y = (canvas.getWidth()/2)+centerOffsetY;
            canvas.drawBitmap(bitmap, x, y, null);

        }

        @Override
        public void draw(Canvas canvas) {
            super.draw( canvas );
            final Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resImage);
            final int x = (canvas.getWidth()/2)+centerOffsetX;
            final int y = (canvas.getWidth()/2)+centerOffsetY;
            canvas.drawBitmap(bitmap, x, y, null);

        }
    }   
}

如何创建自由放置的图像并为其提供OnClick功能?

我不会坚持上述解决方案。对我来说重要的是自由地将图像放在屏幕上并让它们可点击。预定义的布局不会给我一个具有FreeLayout功能的布局。 (或者布局是否误导了我?)

我还要记住,我可能希望以后动态删除图像,但我还没有。

提前感谢您的帮助, 德克

0 个答案:

没有答案