Масштабировать изображение в пользовательском ImageView - PullRequest
0 голосов
/ 22 августа 2011

Я расширяю ImageView для того, чтобы вручную масштабировать изображение в представлении.Я хочу масштабировать изображение, чтобы заполнить ширину пользовательского вида, а затем нарисовать его на холсте, однако я не могу получить ширину вида, используя this.getWidth(). Он просто возвращает 0, так как вид еще не былнарисован и имеет размеры 0 на 0.

В настоящее время у меня в main.xml есть следующее:

<com.android.myapp.BackgroundView
    android:id="@+id/background_view"
    android:layout_height="fill_parent"
    android:layout_width="fill_parent"
    android:src="@drawable/background"
    android:dither="true"
    />

Пользовательский класс выглядит следующим образом:

public class BackgroundView extends ImageView {

    private Paint paint;
    private Bitmap background;

    public BackgroundView(Context context) {
        super(context);
        paint = new Paint();
        loadBitmap();
    }

    public BackgroundView(Context context, AttributeSet attrs) {
        super(context, attrs);
        paint = new Paint();
        loadBitmap();
    }

    public void loadBitmap() {
        BitmapDrawable src = (BitmapDrawable) this.getDrawable();
        background = src.getBitmap();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawBitmap(background, 0, 0, paint);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }

}

Мой класс Main.java:

public class Main extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

Я не могу использовать
Bitmap.createScaledBitmap(background, view.getWidth(), view.getHeight(), false)
, так как представление еще не нарисовано, как бы мне было масштабировать изображение дозаполнить вид / ширину экрана на данный момент?

Заранее спасибо.

1 Ответ

1 голос
/ 22 августа 2011

Я считаю, что то, что вы хотите сделать, также может быть достигнуто с помощью ImageView напрямую в сочетании с атрибутом scaleType .Либо используйте fitXY или centerCrop , в зависимости от ваших потребностей.

Но чтобы ответить на вопрос, вы можете использовать только getWidth () и getHeight () после layout ()был вызван.Таким образом, вы должны иметь возможность использовать значения внутри вашего метода onDraw.

Также вы можете использовать другой метод drawBitmap , чтобы вам не пришлось создавать новое растровое изображение в памяти.

...