2013-11-24 2 views
2

Для моего проекта я Загрузка изображений из Интернета, так что я реализовал простой класс для него:Пользовательского Drawable ничьего() метод не вызывается (Android)

@SuppressWarnings("deprecation") 
public class DynamicDrawable extends BitmapDrawable{ 
    private Drawable drawable; 

    @Override 
    public void draw(Canvas canvas) { 
     // override the draw to facilitate refresh function later 
     if(drawable != null) { 
      drawable.draw(canvas); 
     } 
     Log.d("dnull", String.valueOf(drawable == null)); 
    } 
    protected void setDrawable(Drawable drawable){ 
     this.drawable = drawable; 
    } 
} 

Существует обработчик, который получает и анализирует изображение, добавляет его асинхронно к классу и делает недействительным представление, которое я проверил и отлично работает. Выделяемая переменная не равна нулю. Затем он добавляется в ImageView. Однако метод draw() никогда не вызывается. Даже когда он впервые добавлен. Вот код, в котором изображение входит в виде:

@Override 
public View getView(int position, View convertView, ViewGroup parent){ 
View view = convertView; 

if(view == null){ 
    view = inflater.inflate(R.layout.view_concerteposter, parent,false); 
} 

ConcertPoster poster = posters.get(position); 

ImageView iconView = (ImageView)view.findViewById(R.id.ticketBuy_icon); 
TextView titleView = (TextView)view.findViewById(R.id.ticketBuy_name); 
TextView dateView = (TextView)view.findViewById(R.id.ticketBuy_date); 

iconView.setImageDrawable(poster.getImage()); 
System.out.println(poster.getImage()); 
titleView.setText(poster.getTitle()); 
dateView.setText(poster.getDate()); 

return view; 
} 

Да, я проверил объекты, они все правильно и иметь правильный в них вводимом коэффициент.

Любая помощь будет оценена по достоинству.

+0

Оказывается, вы ожидаете, метод Жеребьевка() для вызывается автоматически, когда вы устанавливаетеImageDrawable(), но почему вы ожидаете этого? В документации не указано, что это ожидаемое поведение. – mttdbrd

+0

Это случается с регулярными выводами. Кроме того, его нельзя вызывать вручную, поскольку объект Canvas удерживается системой и недоступен. – Alex

+0

В документации говорится: «Вручную визуализируйте этот вид (и все его дочерние элементы) на данный холст». Насколько я могу судить, вы должны втягивать в холст, который вы поставляете. Я собираюсь проверить это, и пусть вы знаете, что я нахожу. – mttdbrd

ответ

0

В методе onDraw() для convertView вы должны вручную вызвать метод draw() для Drawable.

protected void onDraw(Canvas canvas) { 
mDrawable.draw(canvas); 
} 

См. here для получения дополнительной информации.

0

Решение, описанное на посту Canvas does not draw in Custom View, разрешило мой случай.

Ваш OnDraw метод никогда не вызывается, вам нужно вызвать setWillNotDraw (ложь) в конструкторе пользовательского вида для того, чтобы получить OnDraw на самом деле называется

Смежные вопросы