보기를 확장하여 자신을 특정 위치에 그리는 클래스를 만들었습니다. 나는 onDraw
방법을 오버라이드 (override) 한 : 나는 클릭 리스너를 설정하고 내가보기의 영역을 클릭 아니에요 경우에도, 레이아웃에 이벤트가 발생을보기를 추가사용자 정의보기 클릭 청취자가보기 대신 모든 화면을 덮습니다.
@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);
더 많은 코드를 표시하고 수용 등급을 높이십시오 (돌아가서 과거 대답을 수락하십시오). –
은 전체 화면을 포함하는보기입니다.이를 테스트하는 좋은 방법은 setBackgroundColor를 투명한 값으로 설정하고 보기가 화면에 배치되었습니다. –
XML 리소스를 사용해 보시기 바랍니다. 나는 그것을 훨씬 깨끗하게 발견한다. –