2012/2013 учебный год
Упражнение 3
В приложении заложите возможность вызова контекстного меню с разными видами анимации. Задание для самостоятельного выполнения: добавьте в контекстное меню 3 вида комбинации двух разных видов анимации, добавьте эти виды анимации в проект.
Внимание! Откройте файл
gen/org/ggpi/AnimClick03/R.java
и проверяйте после выполнения каждого из ниже приведённых соответствующих примеров, что в нём зарегистрированы объекты
frameLayout linearLayout1 tv myalpha myrotate myscale mytranslate mycombors
Пример 3.1. Файл res/layout/main.xml
Создайте файл res/layout/main.xml
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/frameLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical|center_horizontal" android:text="@string/hello_world" android:textSize="38sp" > </TextView> </FrameLayout>
Пример 3.2. Файл res/anim/myrotate.xml
См. Пример 1.2.
Пример 3.3. Файл res/anim/myscale.xml
См. Пример 1.3.
Пример 3.4. Анимация изменения прозрачности. Файл res/anim/myalpha.xml
<?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>
Пример 3.5. Анимация перемещения. Файл res/anim/mytrans.xml
<?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>
Пример 3.6. Файл res/anim/combora.xml
Самостоятельно: комбинация вращения и прозрачности. См. Пример 2.1.
Пример 3.7. Файл res/anim/combotr.xml
Самостоятельно: комбинация перемещения и вращения. См. Пример 2.1.
Пример 3.8. Файл res/anim/combots.xml
Самостоятельно: комбинация перемещения и масштабирования. См. Пример 2.1.
Пример 3.9. Файл MainActivity.java
package org.ggpi.AnimClick03; import android.app.Activity; import android.os.Bundle; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; 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 Activity { // константы для ID пунктов меню final int MENU_ALPHA_ID = 1; final int MENU_SCALE_ID = 2; final int MENU_TRANSLATE_ID = 3; final int MENU_ROTATE_ID = 4; final int MENU_COMBO_ID = 5; TextView tv; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); tv = (TextView) findViewById(R.id.tv); // регистрируем контекстное меню для компонента tv registerForContextMenu(tv); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.tv: // добавляем пункты 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"); break; } super.onCreateContextMenu(menu, v, menuInfo); } @Override public boolean onContextItemSelected(MenuItem item) { Animation anim = null; // определяем какой пункт был нажат switch (item.getItemId()) { case MENU_ALPHA_ID: // создаем объект анимации из файла anim/myalpha 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.mycombors); break; } // запускаем анимацию для компонента tv tv.startAnimation(anim); return super.onContextItemSelected(item); } }