
Заключение
Продукт получился весьма необычным и оригинальным. Его аналогов не много. Нужно потратить много времени, чтобы найти схожий функционал.
Подсвеченный разными цветами циферблат не только красиво смотрится, но и вызывает у человека ассоциацию, связанную с предстоящим событием, а текстовое поле конкретизирует с каким именно.
В будущем планируется расширить функционал. Добавить возможность изменять и удалять существующие заметки. Также планируется предоставить возможность пользователь создавать более одной записи. Будет добавлен другой способ взаимодействия с программой, больше не придется запускать ее при каждой необходимости, достаточно будет вывести виджет на рабочий стол.
Источники литературы
Книги:
Голощапов А. Google Android: Программирование для мобильных устройств. — СПб.: БХВ-Петербург, 2010. — 448 с.
Донн Фелкер. Android: Разработка приложений для чайников. — М.: Диалектика, 2011. — 336 с.
Коматинэни С., Маклин Д., Хэшими С. Google Android: Программирование для мобильных устройств. — 1-е изд. — СПб.: Питер, 2011. — 736 с.
Роджерс Р., Ломбардо Д. Android. Разработка приложений. — М.: ЭКОМ Паблишерз, 2010. — 400 с.
Сатия Коматинени, Дэйв Маклин. Android 4 для профессионалов. Создание приложений для планшетных компьютеров и смартфонов. — М.: Вильямс, ???. — 880 с.
Электронные ресурсы:
http://ru.wikipedia.org/wiki/Android - статья про OC Android в электронной энциклопедии Wikipedia.
http://developer.alexanderklimov.ru/android/ - курс по программированию на языке Java под ОС Android
Приложения
Приложение 1 (Программный код)
MainActivity.java (Главный экран):
public class MainActivity extends Activity {
String text;
String datetext;
String timetext;
// Значения для задания
int year, month, day;
int hour, minute, hour1,minute1, sec;
//Значения реального времени
int syear, smonth, sday;
int shour, sminute;
int color;
int ind;
int f = 0;
int tdate = 0;
int tt = 0;
int stop;
TextView tv1;
TextView tvInfo;
TextView tv2;
ImageView iv1;
Timer timer;
SQLiteDatabase sqdb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv1 = (TextView) findViewById(R.id.tvClock);
tv2 = (TextView) findViewById(R.id.tvFQuest);
tvInfo = (TextView) findViewById(R.id.tvInfo);
iv1 = (ImageView) findViewById(R.id.imageView1);
//----------------------------- -Таймер-------------------------------------
timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
timerTick();
}
}, 0, 1000);
//-------------------Получение данных из базы--------------------------------------
ClockDB sqh = new ClockDB(this);
SQLiteDatabase sqdb = sqh.getWritableDatabase();
Cursor cursor = sqdb.query(ClockDB.TABLE_NAME, new String[] {ClockDB._ID, ClockDB.text, ClockDB.color , ClockDB.time , ClockDB.data , ClockDB.year , ClockDB.month ,
ClockDB.day , ClockDB.minute , ClockDB.hour , ClockDB.minute1 , ClockDB.hour1},
null, // The columns for the WHERE clause
null, // The values for the WHERE clause
null, // don't group the rows
null, // don't filter by row groups
null // The sort order
);
while (cursor.moveToNext()) {
int id = cursor.getInt(cursor.getColumnIndex(ClockDB._ID));
text = cursor.getString(cursor.getColumnIndex(ClockDB.text));
timetext = cursor.getString(cursor.getColumnIndex(ClockDB.time));
datetext = cursor.getString(cursor.getColumnIndex(ClockDB.data));
color = cursor.getInt(cursor.getColumnIndex(ClockDB.color));
year = cursor.getInt(cursor.getColumnIndex(ClockDB.year));
month = cursor.getInt(cursor.getColumnIndex(ClockDB.month));
day = cursor.getInt(cursor.getColumnIndex(ClockDB.day));
minute = cursor.getInt(cursor.getColumnIndex(ClockDB.minute));
hour = cursor.getInt(cursor.getColumnIndex(ClockDB.hour));
minute1 = cursor.getInt(cursor.getColumnIndex(ClockDB.minute1));
hour1 = cursor.getInt(cursor.getColumnIndex(ClockDB.hour1));
}
cursor.close();
sqdb.close();
sqh.close();
}
//-------------------Обработчик таймера-------------------------------------------
private void timerTick() {
this.runOnUiThread(updateDisplay);}
private Runnable updateDisplay = new Runnable() {
public void run() {
final Calendar c = Calendar.getInstance();
shour = c.get(Calendar.HOUR_OF_DAY);
sminute = c.get(Calendar.MINUTE);
syear = c.get(Calendar.YEAR);
smonth = c.get(Calendar.MONTH);
sday = c.get(Calendar.DAY_OF_MONTH);
sec = c.get(Calendar.SECOND);
tv1.setText(
new StringBuilder()
.append(pad(shour)).append(":")
.append(pad(sminute)).append(":")
.append(pad(sec)));
stop = (hour1-shour)*3600 + (minute1-(sminute-1))*60 + (60 - sec);
if ((syear == year) && (smonth == month) && (sday == day)) tdate = 1; else tdate = 0;
if ((shour >= hour) && (sminute >= minute)) tt = 1;
if ((shour >= hour1) && (sminute >= minute1) || (shour == hour1) && (sminute >= minute1) || (shour > hour1) && (sminute <= minute1))
{
tt = 0;
iv1.setImageResource(R.drawable.oval);
tv2.setText(" ");
f = 0;
}
if ((tt == 1) && (f != stop) && (tdate == 1))
{
if (color == 1) iv1.setImageResource(R.drawable.oval1);
if (color == 2) iv1.setImageResource(R.drawable.oval2);
if (color == 3) iv1.setImageResource(R.drawable.oval3);
if (color == 4) iv1.setImageResource(R.drawable.oval4);
if (color == 5) iv1.setImageResource(R.drawable.oval5);
if (color == 6) iv1.setImageResource(R.drawable.oval6);
tv2.setText(text);
f++;
}
}
};
//-------------------Корректировка времени-----------------------------------------
private Object pad(int hour2) {
if (hour2 >= 10)
return String.valueOf(hour2);
else
return "0" + String.valueOf(hour2);
}
//----------------------------Создание меню-----------------------------------------------
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case R.id.mhelp:
Help();
return true;
case R.id.mabout:
About();
return true;
case R.id.mexit:
Exit();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
public void Help()
{
Intent helpIntent = new Intent(MainActivity.this, HelpActivity.class);
startActivity(helpIntent);
}
public void About()
{
Intent aboutIntent = new Intent(MainActivity.this, AboutActivity.class);
startActivity(aboutIntent);
}
public void Exit()
{
finish();
}
//-------------------------События OnClick------------------------------------------------
public void OnQuest (View v) {
Intent saveIntent = new Intent(MainActivity.this, QuestActivity.class);
int ind = 1;
saveIntent.putExtra("i", ind);
startActivity(saveIntent);
finish();
}
public void onNew (View v) {
Intent intent = new Intent(MainActivity.this, NewQuest.class);
startActivity(intent);
finish();
}
}
NewQuest.java (Создание новой записи):
public class NewQuest extends Activity {
int year, month, day;
int hour = -1, minute;
int shour, sminute;
int hour1, minute1;
int color;
int id;
int ttext = 2;
int ttime = 2;
int tdate = 2;
int tcolor = 2;
String nmonth;
static final private int newdata = 0;
static final private int newtime = 0;
static final private int newcolor = 0;
int ind=0;
TextView tvData;
TextView tvTime;
TextView Ot;
TextView Do;
TextView tvColor;
EditText main;
SQLiteDatabase sqdb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new_quest);
tvData = (TextView) findViewById(R.id.tvData);
tvTime = (TextView) findViewById(R.id.tvTime);
tvColor = (TextView) findViewById(R.id.tvColor);
main = (EditText) findViewById(R.id.etMain);
}
//-------------------------Запуск активности для получения данных-------------------------
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == newdata) {
if (resultCode == RESULT_OK) {
day = data.getIntExtra("day", day);
month = data.getIntExtra("month", month);
year = data.getIntExtra("year", year);
if (month == 0) nmonth = "Января"; if (month == 6) nmonth = "Июля";
if (month == 1) nmonth = "Февраля"; if (month == 7) nmonth = "Августа";
if (month == 2) nmonth = "Марта"; if (month == 8) nmonth = "Сентября";
if (month == 3) nmonth = "Апреля"; if (month == 9) nmonth = "Октября";
if (month == 4) nmonth = "Мая"; if (month == 10) nmonth = "Ноября";
if (month == 5) nmonth = "Июня"; if (month == 11) nmonth = "Декабря";
if (day != 0) tvData.setText(new StringBuilder().append(day).append(" ")
.append(nmonth).append(" ").append(year).append(" года."));
}
}
if (requestCode == newtime) {
if (resultCode == RESULT_OK) {
hour = data.getIntExtra("hour", hour);
minute = data.getIntExtra("minute", minute);
hour1 = data.getIntExtra("hour1", hour1);
minute1 = data.getIntExtra("minute1", minute1);
if (hour != -1) tvTime.setText(new StringBuilder() .append("с") .append(pad(hour)) .append(":") .append(pad(minute)) .append(" до ") .append(pad(hour1)) .append(":") .append(pad(minute1)));
}
}
if (requestCode == newcolor) {
if (resultCode == RESULT_OK) {
color = data.getIntExtra("color", color);
if (color == 1)
{
tvColor.setText("ОБРАЗЕЦ ");
tvColor.setBackgroundResource(R.color.color1);
}
if (color == 2)
{
tvColor.setText("ОБРАЗЕЦ ");
tvColor.setBackgroundResource(R.color.color2);
}
if (color == 3)
{
tvColor.setText("ОБРАЗЕЦ ");
tvColor.setBackgroundResource(R.color.color3);
}
if (color == 4)
{
tvColor.setText("ОБРАЗЕЦ ");
tvColor.setBackgroundResource(R.color.color4);
}
if (color == 5)
{
tvColor.setText("ОБРАЗЕЦ ");
tvColor.setBackgroundResource(R.color.color5);
}
if (color == 6)
{
tvColor.setText("ОБРАЗЕЦ ");
tvColor.setBackgroundResource(R.color.color6);
}
}
}
}
//-------------------------------Корректировка времени------------------------------------
private static String pad(int c) {
if (c >= 10)
return String.valueOf(c);
else
return "0" + String.valueOf(c);
//------------------------------Создание меню---------------------------------------------
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.new_quest, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case R.id.mhelp:
Help();
return true;
case R.id.mabout:
About();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
public void Help()
{
Intent helpIntent = new Intent(NewQuest.this, HelpActivity.class);
startActivity(helpIntent);
}
public void About()
{
Intent aboutIntent = new Intent(NewQuest.this, AboutActivity.class);
startActivity(aboutIntent);
}
//------------------------------События OnClick-------------------------------------------
public void onData (View v) {
Intent questionIntent = new Intent(NewQuest.this,DataActivity.class);
startActivityForResult(questionIntent, newdata);
tvData.setText("");
}
public void onTime (View v) {
Intent questionIntent1 = new Intent(NewQuest.this,TimeActivity.class);
startActivityForResult(questionIntent1, newtime);
tvTime.setText("");
}
public void onColor (View v) {
Intent questionIntent2 = new Intent(NewQuest.this,ColorActivity.class);
startActivityForResult(questionIntent2, newcolor);
}
public void onBack1(View v) {
Intent back = new Intent(NewQuest.this,MainActivity.class);
startActivity(back);
finish();
}
public void onSave (View v) {
if (main.getText().toString().equals("")) ttext = 0; else ttext = 1;
if (day == 0) tdate = 0; else tdate = 1;
if (hour == -1) ttime = 0; else ttime = 1;
if (color == 0) tcolor = 0; else tcolor = 1;
if ((ttext ==1) && (tdate ==1) && (ttime ==1) && (tcolor ==1))
{
ClockDB sqh = new ClockDB(this);
SQLiteDatabase sqdb = sqh.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(ClockDB.text, main.getText().toString());
cv.put(ClockDB.time, tvTime.getText().toString());
cv.put(ClockDB.data, tvData.getText().toString());
cv.put(ClockDB.color, color);
cv.put(ClockDB.day, day);
cv.put(ClockDB.year, year);
cv.put(ClockDB.month, month);
cv.put(ClockDB.minute, minute);
cv.put(ClockDB.hour, hour);
cv.put(ClockDB.minute1, minute1);
cv.put(ClockDB.hour1, hour1);
sqdb.insert(ClockDB.TABLE_NAME, null, cv);
Intent saveIntent = new Intent(NewQuest.this,QuestActivity.class);
ind = 1;
saveIntent.putExtra("i", ind);
startActivity(saveIntent);
finish();
}
else
{
Intent intent = new Intent(NewQuest.this, ErrorActivity.class);
id = 1;
intent.putExtra("ttext", ttext);
intent.putExtra("tdate", tdate);
intent.putExtra("ttime", ttime);
intent.putExtra("tcolor", tcolor);
intent.putExtra("id", id);
startActivity(intent);
}
}
}
QuestActivity.java (Просмотр существующих заданий):
public class QuestActivity extends Activity {
int ind = 0;
TextView questtext;
String text = "text";
String timetext = "time";
String datetext = "date";
int year, month, day;
int hour, minute, hour1, minute1;
int color;
SQLiteDatabase sqdb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_quest);
questtext = (TextView) findViewById(R.id.questtext);
//--------------------------------------Чтение из БД------------------------------------------------
ClockDB sqh = new ClockDB(this);
SQLiteDatabase sqdb = sqh.getWritableDatabase();
Intent i = getIntent();
ind = i.getIntExtra("i", ind);
if (ind == 1) {
Cursor cursor = sqdb.query(ClockDB.TABLE_NAME, new String[] {ClockDB._ID, ClockDB.text, ClockDB.color , ClockDB.time , ClockDB.data , ClockDB.year , ClockDB.month ,
ClockDB.day , ClockDB.minute , ClockDB.hour , ClockDB.minute1 , ClockDB.hour1},
null, null, null, null, null);
while (cursor.moveToNext()) {
int id = cursor.getInt(cursor.getColumnIndex(ClockDB._ID));
text = cursor.getString(cursor.getColumnIndex(ClockDB.text));
timetext = cursor.getString(cursor.getColumnIndex(ClockDB.time));
datetext = cursor.getString(cursor.getColumnIndex(ClockDB.data));
color = cursor.getInt(cursor.getColumnIndex(ClockDB.color));
year = cursor.getInt(cursor.getColumnIndex(ClockDB.year));
month = cursor.getInt(cursor.getColumnIndex(ClockDB.month));
day = cursor.getInt(cursor.getColumnIndex(ClockDB.day));
minute = cursor.getInt(cursor.getColumnIndex(ClockDB.minute));
hour = cursor.getInt(cursor.getColumnIndex(ClockDB.hour));
minute1 = cursor.getInt(cursor.getColumnIndex(ClockDB.minute1));
hour1 = cursor.getInt(cursor.getColumnIndex(ClockDB.hour1));
if (color == 1) questtext.setBackgroundResource(R.color.color1);
if (color == 2) questtext.setBackgroundResource(R.color.color2);
if (color == 3) questtext.setBackgroundResource(R.color.color3);
if (color == 4) questtext.setBackgroundResource(R.color.color4);
if (color == 5) questtext.setBackgroundResource(R.color.color5);
if (color == 6) questtext.setBackgroundResource(R.color.color6);
questtext.setText("Текст: " + text + "\nДата: " + datetext + "\nВремя: " + timetext);
}
cursor.close();
sqdb.close();
sqh.close();
}
}
//--------------------------------------Создание меню-----------------------------------------------
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.quest, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case R.id.mhelp:
Help();
return true;
case R.id.mabout:
About();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
public void Help()
{
Intent helpIntent = new Intent(QuestActivity.this, HelpActivity.class);
startActivity(helpIntent);
}
public void About()
{
Intent aboutIntent = new Intent(QuestActivity.this, AboutActivity.class);
startActivity(aboutIntent);
}
//----------------------------------События onClick-------------------------------------------------
public void onBack(View v) {
Intent back = new Intent(QuestActivity.this,MainActivity.class);
startActivity(back);
finish();
}
}