Я создал класс, который расширяет View для того, чтобы нарисовать его самостоятельно, в определенной позиции.Я переопределил метод onDraw
:
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawBitmap(pic, x, y, null);
}
Когда я устанавливаю прослушиватель щелчков и добавляю представление в макет, событие запускается, даже когда я не нажимаю на область представления.Я попытался установить параметры макета для переноса содержимого без посторонней помощи, но попытка удаления "super.onDraw
" тоже не помогла.Если я выполняю те же действия со встроенным представлением (например, кнопкой или представлением изображения), этого не происходит.
В чем проблема?Я делаю что-то не так?
Дополнительный код:
public class FlowingPicture extends View {
private float x,y;
private Bitmap pic;
private int screenWidth;
private int screenHeight;
public FlowingPicture(Context context, Bitmap pic, int x, int y, WindowManager screenSize) {
super(context);
screenHeight = screenSize.getDefaultDisplay().getHeight();
screenWidth = screenSize.getDefaultDisplay().getWidth();
this.pic = pic;
this.x = x;
this.y = y;
}
public void move(float x, float y){
this.x += x;
if(this.x > screenWidth)
this.x = -(this.pic.getWidth());
this.y += y;
this.postInvalidate();
}
public float getX(){
return x;
}
public float getY(){
return y;
}
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawBitmap(pic, x, y, null);
}
}
Часть кода, которая создает представление:
for(int i=0; i<arr.size(); i++){
Bitmap b = arr.get(i).getFlowProfilePic();
int x, y;
do{
y = rand.nextInt(screenHeight - b.getHeight() - 30);
x = rand.nextInt(screenWidth);
}
while (!checkPoint(x, b.getWidth(), y, b.getHeight()));
takenPoints.add(new Point(x, y));
FlowingPicture fp = new FlowingPicture(FlowingFeeds.this, b, -(x + b.getWidth()), y, getWindowManager());
fp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(FlowingFeeds.this, "I'm working!", Toast.LENGTH_SHORT).show();
}
});
fp.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
flowingObjectsList.add(fp);
}
parseHandler.sendEmptyMessage(0);
ParseHandler, добавляющий представления кмакет:
for(FlowingPicture fp : flowingObjectsList){
layout.addView(fp);
}
flow = new Thread(FlowingFeeds.this);
flow.start();
И последняя часть:
layout = new FrameLayout(this);
layout.setBackgroundColor(Color.WHITE);
setContentView(layout);