Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何缩放位图?_Android_Live Wallpaper_Image Scaling_Bitmapfactory_Android Bitmap - Fatal编程技术网

Android 如何缩放位图?

Android 如何缩放位图?,android,live-wallpaper,image-scaling,bitmapfactory,android-bitmap,Android,Live Wallpaper,Image Scaling,Bitmapfactory,Android Bitmap,如果我将不同分辨率的图片放在不同的可绘制文件夹中,它将不会拉伸,并且会从其中一个可绘制文件夹中选择图片。然而,照片还是被拍下来了 如果我只将图片放在一个可绘制文件夹中,由于某些原因,图片将被拉伸到比实际手机尺寸大得多的位置。好像我只能看到照片的中间部分 我还注意到帧被跳过 有人能给我一些建议吗 谢谢你,我非常感谢你的帮助 主要类别: public class main_activity extends WallpaperService { @Override public

如果我将不同分辨率的图片放在不同的可绘制文件夹中,它将不会拉伸,并且会从其中一个可绘制文件夹中选择图片。然而,照片还是被拍下来了

如果我只将图片放在一个可绘制文件夹中,由于某些原因,图片将被拉伸到比实际手机尺寸大得多的位置。好像我只能看到照片的中间部分

我还注意到帧被跳过

有人能给我一些建议吗

谢谢你,我非常感谢你的帮助

主要类别:

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

}
}

编辑:固定标题


编辑:我去掉了黑色的油漆。它不应该在那里

您可以使用以下方法给出具有所需亮度的rect:

public void drawBitmap (Bitmap bitmap, Rect src, RectF dst, Paint paint)
位图将自动转换为矩形尺寸。 或者用大小值填充刚刚创建的矩阵,使其缩放。我假设您可以从屏幕或插入的视图中获取大小值

如果你不具体说明你想做什么,就很难再提供帮助了


更多信息:

非常感谢您的回复。我想做的就是以幻灯片的形式显示图片,我希望所有的图片都能在所有Android手机上拉伸到正确的尺寸/大小。这意味着它应该得到手机的大小,然后相应地拉伸图片。嗯,有什么原因让你特别在画布上画画,而不仅仅是加载图像视图?这些允许你设置某些布局格式,如fitXY等,可以将图像缩放到你给它们的布局大小。老实说,我在网上得到了一些代码,所以我仍然在尝试理解它们,因为我还是一个新手。你能告诉我怎么修吗?谢谢你,你打算如何更改幻灯片上的图像?