2017-02-14 1 views
2

나는 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으로 변환 된 경우 결과 이미지 만 반올림됩니다.

답변

관련 문제