Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Processing:Примеры/Полоса прокрутки

Материал из Онлайн справочника
Перейти к: навигация, поиск


Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Ambox content.png Черновик


Описание[1]

Перемещайте полосы прокрутки влево-вправо, чтобы менять позиции изображений.

Пример

  1. HScrollbar hs1, hs2;  // две полосы прокрутки
  2. PImage img1, img2;    // два изображения для загрузки
  3.  
  4. void setup() {
  5.   size(640, 360);
  6.   noStroke();
  7.  
  8.   hs1 = new HScrollbar(0, height/2-8, width, 16, 16);
  9.   hs2 = new HScrollbar(0, height/2+8, width, 16, 16);
  10.  
  11.   // загружаем изображения:
  12.   img1 = loadImage("seedTop.jpg");
  13.   img2 = loadImage("seedBottom.jpg");
  14. }
  15.  
  16. void draw() {
  17.   background(255);
  18.  
  19.   // считываем позицию полосы прокрутки для «hs1»
  20.   // и конвертируем ее в значение для показа изображения «img1»:
  21.   float img1Pos = hs1.getPos()-width/2;
  22.   fill(255);
  23.   image(img1, width/2-img1.width/2 + img1Pos*1.5, 0);
  24.  
  25.   // считываем позицию полосы прокрутки для «hs2»
  26.   // и конвертируем ее в значение для показа изображения «img2»:  
  27.   float img2Pos = hs2.getPos()-width/2;
  28.   fill(255);
  29.   image(img2, width/2-img2.width/2 + img2Pos*1.5, height/2);
  30.  
  31.   hs1.update();
  32.   hs2.update();
  33.   hs1.display();
  34.   hs2.display();
  35.  
  36.   stroke(0);
  37.   line(0, height/2, width, height/2);
  38. }
  39.  
  40.  
  41. class HScrollbar {
  42.   int swidth, sheight;    // ширина и высота полосы прокрутки
  43.   float xpos, ypos;       // позиции X и Y полосы прокрутки
  44.   float spos, newspos;    // позиция X ползунка
  45.   float sposMin, sposMax; // максимальное и минимальное
  46.                           // значения ползунка
  47.   int loose;              // переменная для того, насколько свободно
  48.                           // будет двигаться ползунок
  49.   boolean over;           // находится ли курсор над ползунком?
  50.   boolean locked;
  51.   float ratio;
  52.  
  53.   HScrollbar (float xp, float yp, int sw, int sh, int l) {
  54.     swidth = sw;
  55.     sheight = sh;
  56.     int widthtoheight = sw - sh;
  57.     ratio = (float)sw / (float)widthtoheight;
  58.     xpos = xp;
  59.     ypos = yp-sheight/2;
  60.     spos = xpos + swidth/2 - sheight/2;
  61.     newspos = spos;
  62.     sposMin = xpos;
  63.     sposMax = xpos + swidth - sheight;
  64.     loose = l;
  65.   }
  66.  
  67.   void update() {
  68.     if (overEvent()) {
  69.       over = true;
  70.     } else {
  71.       over = false;
  72.     }
  73.     if (mousePressed && over) {
  74.       locked = true;
  75.     }
  76.     if (!mousePressed) {
  77.       locked = false;
  78.     }
  79.     if (locked) {
  80.       newspos = constrain(mouseX-sheight/2, sposMin, sposMax);
  81.     }
  82.     if (abs(newspos - spos) > 1) {
  83.       spos = spos + (newspos-spos)/loose;
  84.     }
  85.   }
  86.  
  87.   float constrain(float val, float minv, float maxv) {
  88.     return min(max(val, minv), maxv);
  89.   }
  90.  
  91.   boolean overEvent() {
  92.     if (mouseX > xpos && mouseX < xpos+swidth &&
  93.        mouseY > ypos && mouseY < ypos+sheight) {
  94.       return true;
  95.     } else {
  96.       return false;
  97.     }
  98.   }
  99.  
  100.   void display() {
  101.     noStroke();
  102.     fill(204);
  103.     rect(xpos, ypos, swidth, sheight);
  104.     if (over || locked) {
  105.       fill(0, 0, 0);
  106.     } else {
  107.       fill(102, 102, 102);
  108.     }
  109.     rect(spos, ypos, sheight, sheight);
  110.   }
  111.  
  112.   float getPos() {
  113.     // конвертируем «spos» в диапазон от «0»
  114.     // до суммарной ширины полосы прокрутки:
  115.     return spos * ratio;
  116.   }
  117. }

См.также

Внешние ссылки

  1. processing.org - Scrollbar