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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
kpoxaa
72 / 33 / 1
Регистрация: 03.08.2012
Сообщений: 446
#1

Отследить положение на экране ползунка из SeekBar - Программирование Android

08.10.2013, 10:54. Просмотров 1468. Ответов 10
Метки нет (Все метки)

Подскажите, возможно ли это реализовать. Задача такая: отследить положение ползунка в SeekBar и чуть выше в TextView вывести значение ползунка. Например если значение 0 то и текст сверху будет 0 и вьюха с текстом будет полностью с права над ползунком. Если значение 50, то вьюха будет по центру экрана прямо над полхзунком и т.д. Кто хоть что-т знает отпишитесь пожалуйста. Спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
verylazy
Заблокирован
08.10.2013, 11:03     Отследить положение на экране ползунка из SeekBar #2
http://developer.android.com/referen...eListener.html
kpoxaa
72 / 33 / 1
Регистрация: 03.08.2012
Сообщений: 446
08.10.2013, 11:08  [ТС]     Отследить положение на экране ползунка из SeekBar #3
Да, эти методы вызываются при изменении ползунка. Но как мне вытащить текущее положении ползунка относительно экрана, чтобы немного выше самого ползунка написать текст, который будет двигаться вместе с ползунком по экрану?
verylazy
Заблокирован
08.10.2013, 11:32     Отследить положение на экране ползунка из SeekBar #4
Сейчас нет возможности проверить, поэтому гуглил и читал вслепую.
http://developer.android.com/referen...bsSeekBar.html
у которого есть
public Drawable getThumb ()
Added in API level 16
Return the drawable used to represent the scroll thumb - the component that the user can drag back and forth indicating the current value by its position.
Returns
The current thumb drawable
печалька, только с API 16

И еще нашел вот такую тему http://stackoverflow.com/questions/9...-seekbar-thumb
kpoxaa
72 / 33 / 1
Регистрация: 03.08.2012
Сообщений: 446
08.10.2013, 15:41  [ТС]     Отследить положение на экране ползунка из SeekBar #5
verylazy, спасибо большое. Попробую разобраться.

Добавлено через 3 часа 16 минут
Там полная жесть ) Ничего не понятно

Добавлено через 9 минут
Java
1
2
x = myMethodToSetXPosition();
y = myMethodToSetYPosition();
там в коде остались не определены 2 метода.... как их реализовать?
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
08.10.2013, 16:30     Отследить положение на экране ползунка из SeekBar #6
где?
kpoxaa
72 / 33 / 1
Регистрация: 03.08.2012
Сообщений: 446
08.10.2013, 18:04  [ТС]     Отследить положение на экране ползунка из SeekBar #7
http://stackoverflow.com/questions/9...-seekbar-thumb - вот это я разобрать пытаюсь
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
08.10.2013, 18:06     Отследить положение на экране ползунка из SeekBar #8
ссылка битая
kpoxaa
72 / 33 / 1
Регистрация: 03.08.2012
Сообщений: 446
09.10.2013, 12:53  [ТС]     Отследить положение на экране ползунка из SeekBar #9
http://stackoverflow.com/questions/9...-seekbar-thumb
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
09.10.2013, 13:45     Отследить положение на экране ползунка из SeekBar #10
берете ширину SeekBar'а, умножаете на его прогресс в процентах и получаете положение ползунка относительно левого края SeekBar'а.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2013, 13:24     Отследить положение на экране ползунка из SeekBar
Еще ссылки по теме:
Установить кастомный thumb на seekBar по цетру Android
SeekBar встроенный в строку из меню настроек Android
Android Как менять message AlertDialog в зависимости от progress SeekBar?
Создать SeekBar с 2 ползунками для выбора диапазона значений Android
Android Можно ли в SeekBar отставить только ползунок, а рамку убрать?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
kpoxaa
72 / 33 / 1
Регистрация: 03.08.2012
Сообщений: 446
13.10.2013, 13:24  [ТС]     Отследить положение на экране ползунка из SeekBar #11
Давайте с малого начнем... не могу понять как запустить хотя бы любое отображение, просто канвасом на активити. Вот проект, я тут уже по всякому мучался. V0v1k, если у вас есть пару минуток, гляньте пожалуйста.

Главная активити:

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
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
 
public class MainActivity extends Activity
{
    SeekBarWithText seekBarWithText;
 
    
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        
        seekBarWithText = new SeekBarWithText(this);
        seekBarWithText.findViewById(R.id.seekBar2);
        
        
        seekBarWithText.setOnSeekBarChangeListener(new OnSeekBarChangeListener() 
        {
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) 
            {
                seekBarWithText.setOverlayText("Hello");
            }
            
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) 
            {
                seekBarWithText.setOverlayText("Hello");
                
            }
            
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) 
            {
                seekBarWithText.setOverlayText("Hello");
            }
        });
}

class SeekBarWithText

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
import android.widget.SeekBar;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Paint.Align;
import android.graphics.Typeface;
 
public class SeekBarWithText extends SeekBar 
{
      private static final int textMargin = 6;
      private final int leftPlusRightTextMargins = textMargin + textMargin;
      private static final int maxFontSize = 18;
      private static final int minFontSize = 10;
 
      protected String overlayText;
      protected Paint textPaint;
 
      public SeekBarWithText(Context context) 
      {
        super(context);
        Resources resources = getResources();
 
        //Set up drawn text attributes here
        textPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        textPaint.setTypeface(Typeface.DEFAULT_BOLD);
        textPaint.setTextAlign(Align.LEFT);
      }
 
      //This attempts to ensure that the text fits inside your SeekBar on a resize
      @Override
      protected void onSizeChanged(int w, int h, int oldw, int oldh) 
      {
        super.onSizeChanged(w, h, oldw, oldh);
        
        setFontSmallEnoughToFit(w - leftPlusRightTextMargins);
      }
 
      //Finds the largest text size that will fit
      protected void setFontSmallEnoughToFit(int width) 
      {
        int textSize = 16;
        textPaint.setTextSize(textSize);
        
        while((textPaint.measureText("Hello") > width) && (textSize > 11)) 
        {
          textSize--;
          textPaint.setTextSize(textSize);
        }
      }
 
      //Clients use this to change the displayed text
      public void setOverlayText(String text) 
      {
        this.overlayText = text;
        invalidate();
      }
 
      //Draws the text onto the SeekBar
      @Override
      protected synchronized void onDraw(Canvas canvas) 
      {
        //Draw everything else (i.e., the usual SeekBar) first
        super.onDraw(canvas);
 
        //No text, no problem
        if(overlayText.length() == 0) 
        {
          return;
        }
 
        canvas.save();
 
        //Here are a few parameters that could be useful in calculating where to put the text
        int width = this.getWidth() - leftPlusRightTextMargins;
        int height = this.getHeight();
 
        //A somewhat fat finger takes up about seven digits of space 
        // on each side of the thumb; YFMV
        int fatFingerThumbHangover = (int) textPaint.measureText("1234567");
 
        float textWidth = textPaint.measureText(overlayText);
 
        int progress = this.getProgress();
        int maxProgress = this.getMax();
        double percentProgress = (double) progress / (double) maxProgress;
        int textHeight = (int) (Math.abs(textPaint.ascent()) + textPaint.descent() + 1);
 
        int thumbOffset = this.getThumbOffset();
 
        //These are measured from the point textMargin in from the left of the SeekBarWithText view.
        int middleOfThumbControl = (int) ((double) width * percentProgress); 
        int spaceToLeftOfFatFinger = middleOfThumbControl - fatFingerThumbHangover;
        int spaceToRightOfFatFinger = (width - middleOfThumbControl) - fatFingerThumbHangover; 
 
        int spaceToLeftOfThumbControl = middleOfThumbControl - thumbOffset;
        int spaceToRightOfThumbControl = (width - middleOfThumbControl) - thumbOffset; 
 
        int bottomPadding = this.getPaddingBottom();
        int topPadding = this.getPaddingTop();
 
        //Here you will use the above and possibly other information to decide where you would 
        // like to draw the text.  One policy might be to draw it on the extreme right when the thumb
        // is left of center, and on the extreme left when the thumb is right of center.  These
        // methods will receive any parameters from the above calculations that you need to
        // implement your own policy.
        //x = myMethodToSetXPosition();
        //y = myMethodToSetYPosition();
 
        //Finally, just draw the text on top of the SeekBar
        //canvas.drawText(overlayText, 13, 13, textPaint);
 
        canvas.restore();
      }
}
Вложения
Тип файла: rar Canvas+SeekBar.rar (1.18 Мб, 3 просмотров)
Yandex
Объявления
13.10.2013, 13:24     Отследить положение на экране ползунка из SeekBar
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru