2

다른 해상도의 사진을 다른 드로어 블 폴더에두면 펼쳐지지 않고 드로어 블 폴더 중 하나의 픽처가 선택됩니다. 그러나 그림은 여전히 ​​나옵니다.비트 맵을 스케일하는 방법?

그림을 1 개의 드로어 블 폴더에만 넣으면 몇 가지 이유로 그림이 실제 전화 크기보다 크게 늘어납니다. 사진의 중간 부분 만 볼 수있는 것 같습니다.

나는 또한 건너 뛴 프레임을 발견했습니다.

누군가가 조언을 해줄 수 있습니까?

감사합니다. 귀하의 도움에 감사드립니다.

메인 클래스 :

public class main_activity extends WallpaperService { 



    @Override 
    public void onCreate() { 
    super.onCreate(); 
    } 

    @Override 
    public void onDestroy() { 
    super.onDestroy(); 
    } 

    @Override 
    public Engine onCreateEngine() { 
    eturn new wallpaperEngine();  
    } 

    class wallpaperEngine extends Engine implements 
    SharedPreferences.OnSharedPreferenceChangeListener{ 

    private final Handler mhandler = new Handler();  

    private final Runnable drawrunnable = new Runnable() 
    { 
     public void run() { 
      drawFrame(); 
     } 
    };  

    private boolean mVisible; 
    private SharedPreferences mPrefs; 
    private int i = 0; 


    int[] pirates = { 

    }; 


    wallpaperEngine() 
    { 

    mPrefs = main_activity.this.getSharedPreferences(SHARED_PREFS_NAME, 0); 
    mPrefs.registerOnSharedPreferenceChangeListener(this); 
    onSharedPreferenceChanged(mPrefs, null); 
    } 

    public void onSharedPreferenceChanged(SharedPreferences mPrefs2, String key) { 
    } 


    @Override 
    public void onCreate(SurfaceHolder holder){ 
     super.onCreate(holder); 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     mhandler.removeCallbacks(drawrunnable); 
    } 

    @Override 
    public void onVisibilityChanged(boolean visible) { 
     mVisible = visible; 
     if (visible) { 
      drawFrame(); 
     } else { 
      mhandler.removeCallbacks(drawrunnable); 
     } 
    } 

    @Override 
    public void onSurfaceChanged(SurfaceHolder holder, int format, 
      int width, int height) { 
     super.onSurfaceChanged(holder, format, width, height); 
     drawFrame();  
    } 

    @Override 
    public void onSurfaceCreated(SurfaceHolder holder) { 
     // TODO Auto-generated method stub 
     super.onSurfaceCreated(holder); 
    } 

    @Override 
    public void onSurfaceDestroyed(SurfaceHolder holder) { 
     // TODO Auto-generated method stub 
     super.onSurfaceDestroyed(holder); 
     mVisible = false; 
     mhandler.removeCallbacks(drawrunnable); 
    } 


    @Override 
    public void onOffsetsChanged(float xOffset, float yOffset, float xStep,float yStep, int xPixels, int yPixels) { 
     drawFrame(); 
    } 

    @Override 
    public void onTouchEvent(MotionEvent event) { 
     super.onTouchEvent(event); 
    } 

    private void drawFrame() { 
     // TODO Auto-generated method stub 
     final SurfaceHolder holder = getSurfaceHolder(); 
     Canvas c = null; 
     try { 
      c = holder.lockCanvas(); 
      if (c != null) { 


       drawPirate(c); 
      } 
     } finally { 
      if (c != null) 
       holder.unlockCanvasAndPost(c); 
     } 
     mhandler.removeCallbacks(drawrunnable); 
      if (mVisible) { 
       mhandler.postDelayed(drawrunnable); 
      } 
     } 

    private void drawPirate(Canvas c) { 
     // TODO Auto-generated method stub 

     Bitmap icon;    

     c.drawBitmap(icon, matrix, null); 
     icon.recycle(); 
    } 

} 

}

편집 : 고정 제목

편집 : 나는 블랙으로 페인트를 제거했습니다. 비트 맵이 자동으로 직사각형 크기로 변환됩니다

public void drawBitmap (Bitmap bitmap, Rect src, RectF dst, Paint paint) 

: 당신이 사용하여 원하는 dimmensions와 RECT을 줄 수있다

답변

1

있어야 아니에요. 방금 ​​생성 한 행렬을 실제로 크기 값으로 채워서 크기를 조정하십시오. 크기 값 내가 삽입 한 화면이나 화면에서 가져올 것이라고 가정합니다.

수행하려는 작업을 지정하지 않으면 더 이상 도움이되지 않습니다. 여기

더 : http://developer.android.com/reference/android/graphics/Canvas.html

+0

감사 답장을 많이. 내가하고 싶은 것은 그림을 슬라이드 쇼로 표시하는 것 뿐이며 모든 사진이 모든 Android 휴대 전화에서 올바른 크기/크기로 늘어나는 것을 좋아합니다. 그것이 의미하는 바는 전화의 크기를 알아 내고 그에 따라 그림을 늘려야한다는 것입니다. –

+0

흠, 이미지 뷰를로드하는 것뿐만 아니라 캔버스에 특별히 드로잉하는 이유가 있습니까? 이것들을 사용하면 fitXY와 같은 특정 레이아웃 형식을 설정할 수 있습니다. 이렇게하면 레이아웃 크기로 이미지를 확대 할 수 있습니다. – user2881881

+0

솔직히, 나는 온라인에서 일부 코드를 가지고 있으므로, 아직 초보자이기 때문에 이해하려고 노력 중이다. 그걸 고칠 방법을 보여 주시겠습니까? 감사합니다. –