2015-05-22 2 views
0

Я пытаюсь скрыть часть изображения, чтобы пользователь не видел ее. Сначала я скопировал пиксели Bitmap на другой битмап, не копируя только те пиксели, которые мне нужны, и сделав второй растровый рисунок правильным размером при создании. Это сработало, но у меня много больших изображений, и, к сожалению, это приводит к OOM. Поэтому вместо этого я подумал об использовании ClipDrawable для рисования изображения и создания пикселей, которые мне не нужны невидимы.Использование ClipDrawable для скрытия части и ImageView

Код выглядит следующим образом

ClipDrawable clipDrawable = new ClipDrawable(new BitmapDrawable(resources, bitmap), gravity, orientation); 
clipDrawable.setLevel(level); 

// Cannot use as the imageview source. Must use background or else we don't get anything on the screen. 
picture.setBackground(clipDrawable); 
// This is super important. Do not modify this! Without it you will not get the fullscreen image working and the ImageView will be deleted 
// from the parent layout. 
picture.setImageResource(android.R.color.transparent); 

Идея заключается в том, что я рассчитать уровень в зависимости от размера изображения, так что я скрываю пиксели, мне не нужно. И это работает. Только я не понимаю, почему мне нужно использовать

picture.setBackground(clipDrawable); 

picture.setImageResource(android.R.color.transparent); 

вместо более нормальный:

picture.setImageDrawable(clipDrawable); 

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

Любая помощь будет оценена!

ответ

2
picture.setImageDrawable(new 
    ClipDrawable(new BitmapDrawable(resources, bitmap), gravity, orientation 
)); 

ClipDrawable clipDrawable = (ClipDrawable) picture.getDrawable(); 
clipDrawable.setLevel(level); 
Смежные вопросы