Форум программистов, компьютерный форум CyberForum.ru

Отображение кастомных виджетов в ListView - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Хронометр http://www.cyberforum.ru/android-dev/thread356452.html
Делаю в программе простейший хронометр с 3 кнопками - Start, Stop и Reset. Хронометр почему-то срабатывает так: отсчет начинается сразу после запуска программы, хотя и не отображается. После нажатия на кнопку Старт, на таймере отображается то время, которое прошло с запуска программы и продолжается дальнейший счет. При нажатии на кнопку Стоп отсчет все равно продолжается, но перестает...
Программирование Android Сетевая игра добрый день...нужно написать карточную сетевую игру, чтобы участники могли коннектится и играть через блютуз...подскажите, пожалуйста, литературу по организации обмена данными по блютузу...есть ли в эмуляторе возможность протестировать обмен по блютузу? Заранее спасибо! http://www.cyberforum.ru/android-dev/thread355475.html
Как задать права доступа в программе Программирование Android
Делаю программу, в которой нужен доступ к списку контактов телефона. В манифесте добавил настройку <uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission> В активити такой текст: import android.app.ListActivity; import android.database.Cursor; import android.os.Bundle; import android.provider.Contacts.People; import android.widget.SimpleCursorAdapter; public...
Файл справки для Android Программирование Android
Какие форматы поддерживает Android? и в чём лучше создать файл справки?
Программирование Android Не могу издать звух звонка http://www.cyberforum.ru/android-dev/thread352138.html
Туплю 3 часа. Надо в программе (Android 2.2, java, Eclipce) издать звук Звонка. Написал AudioManager manager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); manager.setRingerMode(AudioManager.RINGER_MODE_NORMAL); А дальше что? Добавлено через 1 час 52 минуты Получилось. С помощью англоязычных источников и какой-то матери....
Программирование Android Что дальше? не могу понять! Андроид Установил SDK Manager для Андроида...вроде как установил все приложения, что предлагались...при этом ни одно приложение так и не пявилось в доступе...что делать? не понимаю! помогите! как вообще пользоваться эти СДК Манэджером и для чего он нужен? В разделе "С/С++ для начинающих" обсуждаются задачи начального уровня по программированию на языке С / С++. Не нужно всё в кучу валить. Ну и... подробнее

Показать сообщение отдельно
swed
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 12

Отображение кастомных виджетов в ListView - Программирование Android

28.09.2011, 21:55. Просмотров 1374. Ответов 0
Метки (Все метки)

Здравствуйте! Недавно столкнулся со следующей задачей - есть полностью кастомный виджет, унаследованный от View, отрисовывается он в методе onDraw и мне необходимо сделать список из таких виджетов в виде ListView. Для этого я переопределяю класс BaseAdapter специально для этого виджета и применяю этот мой custom adapter к виджету списка, но мой кастомный виджет просто не рисуется в списке, вместо него - просто черная полоска шириной один пиксель. Вопрос - что я делаю не так? Заранее спасибо!

Класс, описывающий адаптер:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
public class PBarList extends BaseAdapter{
    private Context mContext = null;
    private ArrayList<String> Vlist = null;
    
    public PBarList(Context context, ArrayList<String> list)
    {
        mContext = context;
        Vlist = list;
    }
 
    @Override
    public int getCount() {
        
        return Vlist.size();
    }
 
    @Override
    public Object getItem(int position) {
        
        return Vlist.get(position);
    }
 
    @Override
    public long getItemId(int position) {
        
        return position;
    }
 
    private View newView(Context context, ViewGroup parent)
    {
        LayoutInflater inflater = LayoutInflater.from(context);
        return inflater.inflate(R.layout.pbar_layout, null);
    }
    
    private void bindView(int position, View view)
    {
        ECProgBar progressBar = (ECProgBar)view.findViewById(R.id.eCProgBar1);
        String array = Vlist.get(position);
        progressBar.setText(array, "");
    }
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) 
    {
        View view = null;
        if(convertView != null) view = convertView;
        else view = newView(mContext, parent);
        bindView(position, view);
        return view;
    }
}
Виджет:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
public class ECProgBar extends View{
 
    private String primaryText;
    private String secondaryText;
    private Paint paint;
    private int pos;
    private int max;
 
    private int background;
    private int foreground;
    private int textColor;
    private int tR, tG;
    
    
    public ECProgBar(Context context) {
        super(context);
        initProgressBar();
    }
    
    public ECProgBar(Context context, AttributeSet attrs){
        super(context, attrs);
        initProgressBar();
    }
    
    protected void onMeasure(int widthSpec, int heightSpec){
        setMeasuredDimension(MeasureWidth(widthSpec), MeasureHeight(heightSpec));
    }
    
    private int MeasureHeight(int heightSpec) {
        int specSize = MeasureSpec.getSize(heightSpec);
        int specMode = MeasureSpec.getMode(heightSpec);
        int result = 0;
        switch(specMode)
        {
        case MeasureSpec.AT_MOST:     //wrap content
            result = 70;
            break;
        case MeasureSpec.EXACTLY:     //fill parent
            result = specSize;
            break;
        }
        
        return result;
    }
 
    private int MeasureWidth(int widthSpec) {
        int specSize = MeasureSpec.getSize(widthSpec);
        int specMode = MeasureSpec.getMode(widthSpec);
        int result = 0;
        if(specMode == MeasureSpec.AT_MOST || specMode == MeasureSpec.UNSPECIFIED)
            result = specSize;
        else if(specMode == MeasureSpec.EXACTLY)
            result = specSize;
        return result;
    }
 
    private void initProgressBar(){
        paint = new Paint();
        max = 90;
        pos = 0;
        background = 0xFFEEEEEE;
        foreground = 0xFF00BADA;
        tR = 0;
        tG = 255;
        textColor = 0xFF111111;
        primaryText = "";
        secondaryText = "";
    }
    
    protected void onDraw(Canvas canvas){
        canvas.drawColor(background);
        paint.setColor(foreground);
        paint.setAntiAlias(true);
        paint.setTextSize(27);
        int curPos = (int) ((double)pos / (double)(max) * getWidth());
        int percent = (int)(((double)pos / (double)max) * 100.0);
        if(percent > 50) tG = 255 - (2 * ((((percent) - 50) * 255) / 100));
        else tR = 2 * (( percent * 255) / 100);
        paint.setColor(Color.rgb(tR, tG, 0));
        
        canvas.drawRect(0, 0, curPos, getHeight(), paint);
        
        paint.setColor(textColor);
        if(paint.measureText(primaryText) > getWidth() - 5)
        {
            String op = "";
            int i = 0;
            while(paint.measureText(op) < getWidth() - 30)
            {
                op += primaryText.charAt(i);
                i++;
            }
            op += "..";
            canvas.drawText(op, 3, (getHeight() / 2) - 5, paint);
        }
        else canvas.drawText(primaryText, 3, (getHeight() / 2) - 5, paint);
 
        paint.setTextSize(18);
        canvas.drawText(secondaryText, 3, (getHeight()/2) + 20, paint);
        
        paint.setColor(Color.rgb(200, 200, 200));
        canvas.drawLine(0, 1, getWidth(), 1, paint);
        paint.setColor(Color.rgb(100, 100, 100));
        canvas.drawLine(0, getHeight()-1, getWidth(), getHeight()-1, paint);
 
        if(pos == 90)
        {
            tR = 0;
            tG = 255;
        }
    }
    
    public void setPos(int position){
        pos = position;
    }
    
    public int getPos(){
        return pos;
    }
    
    public void setText(String primText, String secText){
        primaryText = primText;
        secondaryText = secText;
    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru