如何缩放位图?

时间:2014-04-10 15:37:18

标签: android live-wallpaper image-scaling bitmapfactory android-bitmap

如果我将具有不同分辨率的图片放入不同的可绘制文件夹中,它将不会拉伸,它将从其中一个可绘制文件夹中选择图片。但是,图片仍然没有出现。

如果我将图片放入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();
     }

}

}

修改:固定标题

编辑:我删除了Paint in Black。它不应该在那里

1 个答案:

答案 0 :(得分:1)

您可以使用以下方法为矩形提供所需的dimmensions:

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

位图将自动转换为矩形尺寸。 或者实际用尺寸值填充刚创建的矩阵,使其缩放。大小值我会假设您可以从屏幕或插入的视图中获取。

如果你没有指明你想要做什么,那么很难再帮助你了。

更多信息:http://developer.android.com/reference/android/graphics/Canvas.html