2

Если я поместил изображения с разным разрешением в разные папки с возможностью рисования, он не растянется, и он отобразит изображения из одной из выпадающих папок. Тем не менее, фотографии все же погасли.Как масштабировать растровые изображения?

Если я поместил фотографии только в одну папку с возможностью копирования, по некоторым причинам картинки будут растянуты намного больше, чем фактический размер телефона. Это похоже на среднюю часть фотографий.

Я также заметил, что рамки пропускаются.

Может кто-нибудь, пожалуйста, дайте мне несколько советов?

Спасибо, и я очень благодарен вам за помощь.

главный класс:

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

} 

}

Edit: фиксированный заголовок

Edit: я удалил лак черного цвета. Это не должно быть там

ответ

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

Честно говоря, я получил некоторые мои коды в Интернете, поэтому я все еще пытаюсь понять их, так как я все еще новичок. Не могли бы вы показать мне, как это исправить? Спасибо –