Работа с анимацией в Android (Java, XML)

В данном посте рассматривается работа с анимацией в Android.

Для начала необходимо в папке Res создать папку anim и выбрать Resource type anim. Затем добавлять файлы Animation Resourse File в эту папку.

Далее рассмотрим примеры анимаций.

Анимация прозрачности

<?xml version="1.0" encoding="utf-8"?>
<alpha
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:fromAlpha="0.0"
  android:toAlpha="1.0"
  android:duration="3000">
</alpha>

Анимация перемещения

<?xml version="1.0" encoding="utf-8"?>
<translate
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:fromXDelta="-150"
  android:toXDelta="0"
  android:fromYDelta="-200"
  android:toYDelta="0"
  android:duration = "3000">
</translate>

Анимация поворота

<?xml version="1.0" encoding="utf-8"?>
<rotate
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:fromDegrees="0"
  android:toDegrees="360"
  android:duration = "3000">
</rotate>

Анимация масштабирования

<?xml version="1.0" encoding="utf-8"?>
<scale
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:fromXScale="0.1"
  android:toXScale="1.0"
  android:fromYScale="0.1"
  android:toYScale="1.0"
  android:pivotX="50%"
  android:pivotY="50%"
  android:duration="3000">

Использование сразу нескольких эффектов анимаций

Объединяем анимации разворота и масштабирования:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
  <rotate
    android:fromDegrees="0"
    android:toDegrees="360"
    android:duration="3000"
    android:pivotY="50%"
    android:pivotX="50%">
  </rotate>
  <scale
    android:fromXScale="0.1"
    android:toXScale="1.0"
    android:fromYScale="0.1"
    android:toYScale="1.0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="3000">
  </scale>
</set>

Запуск анимации через контекстное меню

В приведенном ниже коде описанные анимации запускаются через контекстное меню:

package razilov.ru;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

  private TextView textView;

  private final int MENU_ALPHA_ID = 1;
  private final int MENU_SCALE_ID = 2;
  private final int MENU_TRANSLATE_ID = 3;
  private final int MENU_ROTATE_ID = 4;
  private final int MENU_COMBO_ID = 5;

  @Override
  public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
    switch (v.getId()){
      case R.id.textView:
      menu.add(0, MENU_ALPHA_ID, 0, "Alpha");
      menu.add(0, MENU_SCALE_ID, 0, "Scale");
      menu.add(0, MENU_TRANSLATE_ID, 0, "Translate");
      menu.add(0, MENU_ROTATE_ID, 0, "Rotate");
      menu.add(0, MENU_COMBO_ID, 0, "Combo");
    }
    super.onCreateContextMenu(menu, v, menuInfo);
  }

//Работа с анимацией
  @Override
  public boolean onContextItemSelected(MenuItem item) {
    Animation anim = null;

    switch (item.getItemId()){
      case MENU_ALPHA_ID:
      anim = AnimationUtils.loadAnimation(this, R.anim.myalpha);
      break;
      case MENU_SCALE_ID:
      anim = AnimationUtils.loadAnimation(this, R.anim.myscale);
      break;
      case MENU_TRANSLATE_ID:
      anim = AnimationUtils.loadAnimation(this, R.anim.mytrans);
      break;
      case MENU_ROTATE_ID:
      anim = AnimationUtils.loadAnimation(this, R.anim.myrotate);
      break;
      case MENU_COMBO_ID:
      anim = AnimationUtils.loadAnimation(this, R.anim.mycombo);
      break;
    }

    textView.startAnimation(anim);
    return super.onContextItemSelected(item);
  }

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    textView = (TextView)findViewById(R.id.textView);
    registerForContextMenu(textView);
  }
}

Код очень простой. Если есть вопросы, задавайте.

Результат приведенного кода привожу по ссылке.

Программное добавление элементов в Android (Java)

В этой статье разбираемся как осуществить программное добавление элементов в Android. В следующем фрагменте кода показано объявление элементов, настройка их параметров и отображение их в LinearLayout.

Добавляем элементы в активити из кода

Привожу пример программного добавления элементов:

package razilov.ru;

import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.view.Gravity;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        LinearLayout linearLayout = new LinearLayout(this);
        linearLayout.setOrientation(LinearLayout.VERTICAL);
        ViewGroup.LayoutParams linLayoutParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        setContentView(linearLayout, linLayoutParams);


        ViewGroup.LayoutParams lpView = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

        TextView tv = new TextView(this);
        tv.setText("TextView");
        tv.setLayoutParams(lpView);
        linearLayout.addView(tv);

        Button btn = new Button(this);
        btn.setText("Button");
        linearLayout.addView(btn, lpView);

        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        layoutParams.leftMargin = 50;

        Button btn1 = new Button(this);
        btn1.setText("Btn1");
        linearLayout.addView(btn1, layoutParams);

        LinearLayout.LayoutParams layoutParams1 = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        layoutParams1.gravity = Gravity.RIGHT;

        Button btn2 = new Button(this);
        btn2.setText("btn2");
        linearLayout.addView(btn2, layoutParams1);

    }
}

Функция addView добавляет элемент в контрол.

Отображение переменных из конфигурационного файла (Smarty)

В папке configs создаем конфигурационный файл.
Например myconf.conf .

В нем пишем:

#Это просто комментарий
sitename = ‘My new WebSite’
author = ‘Nickolay Razilov’

В *.tpl файле в самом начале прописываем:

{config_load file=’myconf.conf’}

Отображаем переменные из myconf.conf в файле *.tpl:

Site name is {#sitename#} and author is {#author#}.

Установка Smarty

В папке с сайтом создаем 4 папки:

  1. cache
  2. configs
  3. templates
  4. templates_c

Скачиваем Smarty и копируем папку libs из архива со Smarty
в папку с сайтом. Для удобства можно переименовать libs в lib.

В php файле прописываем:

include_once «lib/smarty.class.php»;     //подключаем файл с классом Smarty
$smarty = new Smarty();                       //создаем объект smarty

Установка завершена. Проверяем.

$smarty->assign(‘name_var’, $name_var);    //передача параметров (Название переменной в  первом параметре и значение этой переменной во втором параметре).

$smarty->display(‘index.tpl’);                         //отображение шаблона  index.tpl (должен лежать в папке templates)

В шаблоне index.tpl пишем:

{$name_var}   —  нам отобразится переменная, заданная в файле index.php


/openmp (включение поддержки OpenMP 2.0)

Установка данного параметра компилятора в среде разработки Visual Studio

  1. Откройте диалоговое окно Страницы свойств проекта. Дополнительные сведения см. в разделе Открытие свойств страниц проекта.
  2. Разверните узел Свойства конфигурации.
  3. Разверните узел C/C++.
  4. Выберите страницу свойств Язык.
  5. Измените значение свойства Поддержка OpenMP.

Создание и удаление папок в терминале (Linux Debian)

1. Удаляем файл в текущей директории:
rm filename 

 2. Удаляем файл размещенный за пределами текущей директории:
 rm /path/to/folder/filename 

 3. Удаляем все файлы в директории:
rm /path/to/folder/* 

 4. Если удаления файла требует привилегий суперпользователя:
sudo rm filename 

 5. Удаляем пустую директорию:
rmdir foldername 

 6. Если директория содержит файлы и подпапки то используем следующую команду:
rm -r foldername 

 7. Если удаления директории требует привилегий суперпользователя:
sudo rm -r foldername

Актуальный Debian squeeze source.list

deb http://ftp.ru.debian.org/debian stable main contrib non-free
deb-src http://ftp.ru.debian.org/debian stable main contrib non-free

deb http://ftp.debian.org/debian/ wheezy-updates main contrib non-free
deb-src http://ftp.debian.org/debian/ wheezy-updates main contrib non-free

deb http://security.debian.org/ wheezy/updates main contrib non-free
deb-src http://security.debian.org/ wheezy/updates main contrib non-free