Установите OnClickListener для просмотра чертежа растрового изображения, нарисованного Canvas - PullRequest
3 голосов
/ 14 июля 2011

Мне не удается решить проблему.

Я вручную разместил два изображения на экране.Я хотел бы иметь обработку событий onClick для каждого из них.При следующем подходе обработчик OnClick представляется действительным только для фона.На самом деле все созданные дочерние представления / имиджеры и их onClickListeners реагируют на родительский объект, на который они рисовали.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.(Или намерение Layout вводит меня в заблуждение?)

Я также имею в виду, что, вероятно, хочу динамически удалить изображение позже, но я еще не там.

Большое спасибоЗа помощь заранее, Дирк

...