나는 Multibutton
을 사용하여 InfiniteScrollAdapter
에 사진과 설명이 포함 된 목록을 표시합니다.멀티 박스 (코드 네임 원)에서 둥근 이미지 (마스크를 통해)를 만들 수 있습니까?
잘 작동하지만 사진을 둥글게 만들 필요가 있습니다. 그래서 이미지 마스킹에 대해 the official guide에 영감을 얻었습니다. 불행히도 내가 얻는 것은 오직 검은 색 라운드입니다.
MultiButton[] cmps = new MultiButton[reports.size()];
for (int iter = 0; iter < reports.size(); iter++) {
Report currentReport = reports.get(iter);
if (currentReport == null) {
InfiniteScrollAdapter.addMoreComponents(this.getContentPane(), new Component[0], false);
return;
}
String photoFilenameInStorage = Report.getFilename(currentReport.getPhotoPath());
Image reportImage = URLImage.createToStorage(placeholder, photoFilenameInStorage, currentReport.getPhotoPath(), URLImage.RESIZE_SCALE_TO_FILL);
int w = reportImage.getWidth();
int h = reportImage.getHeight();
// Generates a mask to make the image round
Image maskImage = Image.createImage(w, h, 0xff000000);
Graphics g = maskImage.getGraphics();
g.setAntiAliased(true);
g.setColor(0xFFFFFF);
g.fillArc(0, 0, w, h, 0, 360);
Object mask = maskImage.createMask();
Image maskedImage = reportImage.applyMask(mask);
String summary = currentReport.getLocation();
cmps[iter] = new MultiButton(summary);
// Only shows a black filled circle!
cmps[iter].setIcon(maskedImage);
}
InfiniteScrollAdapter.addMoreComponents(this.getContentPane(), cmps, true);
내가 발견 한 것은 내가 CN1의 둥근 이미지에 대해 찾을 수있는 모든 예제는 Label
처리한다는 것입니다 : 여기에 사용되는 코드입니다. 코드 네임 1의 MultiButton
에 마스크를 적용 할 수 있습니까? 그렇다면 어떻게 할 수 있습니까? 내가 한 비록 어떤 도움을 주시면 감사
, 내가 힘든 시간이 있었다 2017년 2월 16일
답변과 의견을 읽은 후
요약 내 다이아몬드의 대답 @ 작업했던 이유를 파악하지합니다 둥근 이미지를 얻기 위해 마스킹에 대한 @ Shai의 가이드를 따르십시오. CN1의 다른 초보자가이 문제를 다룰 때를 대비하여 결과를 씁니다. 많은 도움이 된 그의 위대한 설명을 위해 @Diamond로 다시 Thnaks!
우선, 위에서 소개 한 둥근 마스크는 검정색 라운드를 만들기 때문에 작동합니다. 실제로 마스크가 reportImage
아직 가져 오지 않는 한이 GUI에 의해 요구 될 때 이미지가 느리게 페치 기본적으로 since quoting from the javadoc
을 다운로드하지 않은 적용되는 시간() 메소드가있는 케이스에 호출 IO 코드는 즉시 실행됩니다.
따라서 reportImage
은 여전히 자리 표시자를 정의한 것처럼 검정입니다. 그런데 @Diamond가 둥근 자리 표시 자을 정의하여 실제 (둥근) 이미지를 사용할 수있게되기 전에 멋진 색상으로 표시 할 것을 제안했습니다 (그의 답변에서 첫 번째 cmps[iter].setIcon(placeholder)
호출 참조).
그리고 InfiniteScrollAdapter
요구하고 가져 오는 경우 URLImage은 실제로 다운로드됩니다 @Diamond 위의 코드가 InfiniteScrollAdapter
에서 작동 할 수없는 결론으로 내가하는 경향이 내 모든 시험 후
그래서 랩 왜 image.That의 @Diamond가 @ Shai의 제안으로 작성한 코드 만 제가하고 싶은 것을 성취 할 수있는 유일한 방법이라고 생각하십시오.
다운로드 한 사진이 PNG @ Diamond의 원형 마스크 어댑터 인 경우 더 이상 작동하지 않는 것으로 보입니다.> PNG가 JPEG으로 변환 된 경우 결과 이미지 만 반올림됩니다.