МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Кафедра ЕОМ
ЗВІТ ДО ЛАБОРАТОРНОЇ РОБОТИ №3
з дисципліни:
«Мережні операційні системи»
на тему:
«Управління вводом/виводом та сенсорною підсистемою в ОС Android»
МЕТА: Оволодіти навичками програмування і управління вводом/виводом й сенсорною підсистемою в ОС Android.
1. Завдання
Створити тестову програму на основі програми-прототипу згідно заданого варіанту.
Програма контролю дотиків до сенсорного екрану (SingleTouchTest.java та MultiTouchTest.java)
Інтерфейс простої форми для вводу даних.
2. Перелік основних елементів інтерфейсу Android-пристрою
Графічний інтерфейс користувача для Android програми побудований з використанням ієрархії View і ViewGroup об'єктів. View об'єкти, як правило - це UI віджети, такі як кнопки або текстові поля і ViewGroup, а також невидимі контейнери, які визначають, як будуть використовуватись child-елементи, наприклад, у сітці або вертикальному списку.
Android надає XML-словник, який відповідає підкласам View і ViewGroup, тому ви можете визначити свій користувальницький інтерфейс в XML, використовуючи ієрархію елементів інтерфейсу користувача.
/
Рис.1. Ілюстрація того, як ViewGroup об'єкти утворюють філії в макеті і містять інші View об'єкти.
Основними елементами інтерфейсу Android пристрою є: кнопки, списки, текстові поля вводу, текстові поля виводу, radio button, check button, progress bar, data picker, rating bar та інші.
Платформа для інтерфейсу користувача Android заснована на обробці дотиків. Пристрої Android оснащуються сенсорними екранами, тому android додатки повинні добре підтримувати сенсорний ввід. У режимі сенсорного введення зазвичай немає фокусу і вибраного елемента, а при перемиканні на інші режими (наприклад: режим списку) і назад фокус і вибраний елемент можуть зникати і знову з'являтися. Винятком є сфокусований режим сенсорного введення. Кнопки і віджети повинні бути досить великими, щоб їх можна було вибрати дотиками.
3. Лістинг тестової програми
SingleTouch.java
package com.example.kubic.moslab3;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;
public class SingleTouch extends AppCompatActivity implements View.OnTouchListener {
TextView tv;
float x;
float y;
String sDown;
String sMove;
String sUp;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
tv = new TextView(this);
tv.setOnTouchListener(this);
setContentView(tv);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
x = event.getX();
y = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
sDown = "Down: " + x + "," + y;
sMove = ""; sUp = "";
break;
case MotionEvent.ACTION_MOVE:
sMove = "Move: " + x + "," + y;
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
sMove = "";
sUp = "Up: " + x + "," + y;
break;
}
tv.setText(sDown + "\n" + sMove + "\n" + sUp);
return true;
}
}
MultiTouch.java
package com.example.kubic.moslab3;
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;
public class MultiTouch extends Activity implements View.OnTouchListener {
StringBuilder sb = new StringBuilder();
TextView tv;
int upPI = 0;
int downPI = 0;
boolean inTouch = false;
String result = "";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
tv = new TextView(this);
tv.setTextSize(30);
tv.setOnTouchListener(this);
setContentView(tv);
}
@Override
public boolean onTouch(View view, MotionEvent event) {
int actionMask = event.getActionMasked();
int pointerIndex = event.getActionIndex();
int pointerCount = event.getPointerCount();
switch (actionMask) {
case MotionEvent.ACTION_DOWN:
inTouch = true;
case MotionEvent.ACTION_POINTER_DOWN:
downPI = pointerIndex;
break;
case MotionEvent.ACTION_UP:
inTouch = false;
sb.setLength(0);
case MotionEvent.ACTION_POINTER_UP:
upPI = pointerIndex;
break;
case MotionEvent.ACTION_MOVE:
sb.setLength(0);
for (int i = 0; i < 10; i++) {
sb.append("Index = " + i);
if (i < pointerCount) {
sb.append(", ID = " + event.getPointerId(i));
sb.append(", X = " + event.getX(i));
sb.append(", Y = " + event.getY(i));
} else {
sb.append(", ID = ");
sb.append(", X = ");
sb.append(", Y = ");
}
sb.append("\r\n");
}
break;
}
result = "down: " + downPI + "\n" + "up: " + upPI + "\n";
if (inTouch) {
result += "pointerCount = " + pointerCount + "\n" + sb.toString();
}
tv.setText(result);
return true;
}
}
4. Результати виконання тестової програми
Рис.2. Результат виконання SingleTouch.
Рис.2. Результат виконання MultiTouch.
ВИСНОВОК
В даній лабораторній роботі я оволодів навичками програмування і управління вводом/виводом й сенсорною підсистемою в ОС Android.