2012-07-09 3 views
0

나는 이것에 관해 많은 다른 스레드가 있음을 알고 있습니다. 나는 지난 2 일 동안 아무 쓸데없이 그들을 통해 확인하고 있었고, 지금 그것은 내 견과를 몰고있다. 그래서 기본적으로 비트 맵에로드하는 스프라이트 시트가 있고, 프레임을 잘라내어 스케일링을 수행 한 다음 나중에 애니메이션을 위해 목록에로드합니다. 스케일링은 ldpi에서 xhdpi까지 다양하게 보입니다. 애니메이션도 마찬가지입니다.다른 화면에 비트 맵 배치하기

하지만 버그가 있다는 또 다른 문제가 있습니다. 다른 장치에서의 위치 지정입니다. 나는 canvas.drawBitmap (비트 맵, srcRect, destRect, 페인트)으로 그립니다. 글쎄, 나는 코드가 천 단어 이상을 말하는 것 같아.

//converting dps to pixels 
int xCoord = convertToPixels(100); 
int yCoord = convertToPixels(150); 

//defining destination rectangle; sprite is a Bitmap object 
Rect destRect = new Rect(xCoord, yCoord, xCoord+sprite.getWidth(), yCoord+sprite.getHeight()); 

//drawing 
canvas.drawBitmap(sprite, null, destRect, null); 

convertToPixels는 (부동 DP)은 단지 화학식 Math.round (DP *의 밀도)을 화소의 수를 반환한다.

나는 dps를 지정하면 모든 기기의 종횡비가 동일해야한다고 생각합니다. 한 장치의 화면 크기의 10 %에 무언가를 쓴다면 다른 작은/큰/약한 밀도/약한 밀도의 화면에서 10 %를 유지해야합니다. 하지만 내 논리에 결함이있는 것 같아요. 작동하지 않기 때문입니다. 그것은 다른 장소에있는 다른 장치에 스프라이트를 그립니다.

요약 : x와 y 좌표가 100 dps 인 destRect로 비트 맵 객체를 그리는 것은 캔바스 크기에 대한 모든 장치의 비율을 유지해야합니다. 그렇지 않으면이 방법을 생각해 봐야합니다.

저는이 문제에 대해 저에게 당신을 도와 주실 것을 부탁드립니다. 왜냐하면 저는 지금 잃어버린 분이 십니다. 개발자 사이트 또는 유사한 사이트에서 "여러 화면 지원"링크를 여러 번 읽었으므로 그 내용을 이해할 수없는 것 같습니다. 고맙습니다!

답변

0

dip to px 계산이 정확합니까? 나는이 작업을 수행하려면 다음 코드를 작성 : Application.getContext()는 응용 프로그램 전체 문맥을, 또는 지역 활동 컨텍스트를 제공

public class ViewHelper { 
    public static int getPxFromDip(int dips){ 
     return (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dips, Application.getContext().getResources().getDisplayMetrics()); 
    } 
} 

.

+0

여기에있는 수식을 사용했습니다. 또한 다른 수식을 시도해 보았습니다. 0.5f (공식 주제에 대해)를 추가 한 것, xdip 및 ydip의 밀도를 계산하는 공식 및 위에서 제공 한 수식을 시도했습니다. 그들 중 누구도 결과를 바꿀 수 없습니다. 나는 단지 확신을 재확인했다. 그래도 고마워. – x123y234z345

관련 문제