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(); 
    } 

} 

}

編輯:固定標題

編輯:我在黑油漆去除。它不應該在那裏

回答

1

你可以給使用所需dimmensions一個矩形:

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

圖片將自動轉化爲矩形的尺寸。 或者實際上使用大小值填充您剛剛創建的矩陣,以便縮放。尺寸值,我會假設你會從屏幕或插入的視圖中得到。

如果你沒有指定你想要做什麼,這很難幫助你。

更多這裏:http://developer.android.com/reference/android/graphics/Canvas.html

+0

非常感謝您的答覆。我想要做的就是以幻燈片形式顯示圖片,並且我喜歡所有圖片在所有Android手機上都以正確的尺寸/尺寸展開。這意味着它應該獲得手機的大小,然後相應地拉伸圖片。 –

+0

嗡嗡聲,是否有一個原因,你是專門繪製在畫布上,而不是隻加載ImageViews?這些允許您設置特定的佈局格式,比如fitXY等,這樣可以將圖像縮放爲您提供的佈局大小。 – user2881881

+0

老實說,我在網上有一些我的代碼,所以我仍然試圖瞭解他們,因爲我還是一個新手。你能告訴我如何解決它嗎?謝謝 –