Урок 20. Анимация
R.anim.myalpha
Как сделать, что бы myalpha.xml и другие xml с папки anim были видны в R.java ?
никак не могу понять, почему они там не прописались, и main.xml в lyaout тоже иногда для R.java недоступен (((
подскажите пожалуйста, как это побороть.
никак не могу понять, почему они там не прописались, и main.xml в lyaout тоже иногда для R.java недоступен (((
подскажите пожалуйста, как это побороть.
Re: Урок 20. Анимация
Не помогло
Сделал всё заново и заработало.
Сделал всё заново и заработало.
Re: Урок 20. Анимация
Ребята,у меня почему-то работает только combo??никто не сталкивался с такой проблемой???
потому что остальное не пашет,хотя код переписывал и вручную,и пробовал копировать ничего не помогает(
потому что остальное не пашет,хотя код переписывал и вручную,и пробовал копировать ничего не помогает(
Re: Урок 20. Анимация
Добрый день.
Спасибо за подробные уроки.
Не могу разобраться... Он подчеркивает OnCreateContextMenu... и предлагает убрать Override, потому, что
"The method OnCreateContextMenu(ContextMenu, View, ContextMenu.ContextMenuInfo) of type MainActivity must override a superclass method".
Если убрать, то контекстное меню не вызывается. Если копирую целиком код из урока, то на Override не ругается и все работает. Подскажите, если не сложно, где ошибка.
Заранее спасибо.
Спасибо за подробные уроки.
Не могу разобраться... Он подчеркивает OnCreateContextMenu... и предлагает убрать Override, потому, что
"The method OnCreateContextMenu(ContextMenu, View, ContextMenu.ContextMenuInfo) of type MainActivity must override a superclass method".
Если убрать, то контекстное меню не вызывается. Если копирую целиком код из урока, то на Override не ругается и все работает. Подскажите, если не сложно, где ошибка.
Заранее спасибо.
Код: Выделить всё
package ru.startandroid.develop.p0201simpleanimation;
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 {
final int Alfa = 1;
final int Scale = 2;
final int Trans = 3;
final int Rotate = 4;
final int Combo = 5;
TextView tv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView) findViewById(R.id.tv);
registerForContextMenu (tv);
}
@Override
public void OnCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
switch (v.getId()) {
case R.id.tv:
menu.add(0, Alfa, 0, "Прозрачность");
menu.add(0, Scale, 0, "Размер");
menu.add(0, Trans, 0, "Движение");
menu.add(0, Rotate, 0, "Вращение");
menu.add(0, Combo, 0, "Комбо");
break;
}
super.onCreateContextMenu(menu, v, menuInfo);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
Animation anim = null;
switch (item.getItemId()) {
case Alfa:
anim = AnimationUtils.loadAnimation(this, R.anim.myalpha);
break;
case Scale:
anim = AnimationUtils.loadAnimation(this, R.anim.myscale);
break;
case Rotate:
anim = AnimationUtils.loadAnimation(this, R.anim.myrotate);
break;
case Trans:
anim = AnimationUtils.loadAnimation(this, R.anim.mytrans);
break;
case Combo:
anim = AnimationUtils.loadAnimation(this, R.anim.mycombo);
break;
}
tv.startAnimation(anim);
return super.onContextItemSelected(item);
}
}
Re: Урок 20. Анимация
Извините за беспокойство, разобрался)))AHAXOPET писал(а): Не могу разобраться...
Re: Урок 20. Анимация
Если кому не трудно, объясните, почему не работает такая анимация?
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false" >
<scale
android:duration="3000"
android:fromXScale="1.0"
android:fromYScale="1.0"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="0.0"
android:toYScale="1.0" >
</scale>
<scale
android:duration="3000"
android:fromXScale="0.0"
android:fromYScale="1.0"
android:pivotX="50%"
android:pivotY="50%"
android:startOffset="3000"
android:toXScale="1.0"
android:toYScale="1.0" >
</scale>
</set>
Re: Урок 20. Анимация
Да, непонятно.PashaD писал(а):Если кому не трудно, объясните, почему не работает такая анимация?
Используйте setAnimationListener, и запускайте вторую отдельно после первой.
Re: Урок 20. Анимация
Добрый день.
Подскажите, пожалуйста, как можно оптимизировать этот код? Нужна переменная, но какая и где, не могу понять.
Тут три объекта. Радиокнопки определяют, какой именно объект анимируется. Варианты анимации выбираются из меню.
Заранее спасибо.
Подскажите, пожалуйста, как можно оптимизировать этот код? Нужна переменная, но какая и где, не могу понять.
Тут три объекта. Радиокнопки определяют, какой именно объект анимируется. Варианты анимации выбираются из меню.
Заранее спасибо.
Код: Выделить всё
package ru.toxa.animation;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
final int alfa = 1;
final int scale = 2;
final int trans = 3;
final int rotate = 4;
final int combo1 = 5;
final int combo2 = 6;
TextView text;
Button button;
ImageView image;
RadioGroup radio;
RadioButton radio0, radio1, radio2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Toast.makeText(this, "Привет. Нажми Меню!", Toast.LENGTH_SHORT).show();
text = (TextView) findViewById(R.id.text);
radio = (RadioGroup) findViewById(R.id.radio);
image = (ImageView) findViewById(R.id.image);
button = (Button) findViewById(R.id.button);
radio0 = (RadioButton) findViewById(R.id.radio0);
radio1 = (RadioButton) findViewById(R.id.radio1);
radio2 = (RadioButton) findViewById(R.id.radio2);
}
// Создание меню
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return super.onCreateOptionsMenu(menu);
}
// обработка нажатий
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case R.id.alfa:
//Определяем, какая радиокнопка нажата:
switch (radio.getCheckedRadioButtonId()) {
case R.id.radio0:
button.startAnimation(AnimationUtils.loadAnimation(this, R.anim.myalpha));
break;
case R.id.radio1:
text.startAnimation(AnimationUtils.loadAnimation(this, R.anim.myalpha));
break;
case R.id.radio2:
image.startAnimation(AnimationUtils.loadAnimation(this, R.anim.myalpha));
break; }
break;
case R.id.scale:
switch (radio.getCheckedRadioButtonId()) {
case R.id.radio0:
button.startAnimation(AnimationUtils.loadAnimation(this, R.anim.myscale));
break;
case R.id.radio1:
text.startAnimation(AnimationUtils.loadAnimation(this, R.anim.myscale));
break;
case R.id.radio2:
image.startAnimation(AnimationUtils.loadAnimation(this, R.anim.myscale));
break; }
break;
case R.id.rotate:
switch (radio.getCheckedRadioButtonId()) {
case R.id.radio0:
button.startAnimation(AnimationUtils.loadAnimation(this, R.anim.myrotate));
break;
case R.id.radio1:
text.startAnimation(AnimationUtils.loadAnimation(this, R.anim.myrotate));
break;
case R.id.radio2:
image.startAnimation(AnimationUtils.loadAnimation(this, R.anim.myrotate));
break; }
break;
case R.id.combo1:
switch (radio.getCheckedRadioButtonId()) {
case R.id.radio0:
button.startAnimation(AnimationUtils.loadAnimation(this, R.anim.mycombo));
break;
case R.id.radio1:
text.startAnimation(AnimationUtils.loadAnimation(this, R.anim.mycombo));
break;
case R.id.radio2:
image.startAnimation(AnimationUtils.loadAnimation(this, R.anim.mycombo));
break; }
break;
case R.id.combo2:
switch (radio.getCheckedRadioButtonId()) {
case R.id.radio0:
button.startAnimation(AnimationUtils.loadAnimation(this, R.anim.mycombo2));
break;
case R.id.radio1:
text.startAnimation(AnimationUtils.loadAnimation(this, R.anim.mycombo2));
break;
case R.id.radio2:
image.startAnimation(AnimationUtils.loadAnimation(this, R.anim.mycombo2));
break; }
break;
}
return super.onOptionsItemSelected(item);
}
}
Re: Урок 20. Анимация
Как вариант:AHAXOPET писал(а):Добрый день. Подскажите, пожалуйста, как можно оптимизировать этот код?
Создайте метод (например startAnim), который на вход будет брать ID анимации - int.
Внутри:
- в switch определяйте по радиокнопке какой объект будете анимировать, и записывайте его в переменную view типа View
- применяйте к view анимацию, которая пришла на вход
В onOptionsItemSelected можно создать переменную int anim. Ее заполняйте в каждом case в switch, который определяет ID анимации. А после прохождения switch вызывайте метод startAnim и передавайте ему на вход anim.
Re: Урок 20. Анимация
Подскажите, пожалуйста, как создать анимацию в коде программы, без использования XML. Конкретно - translateAnimation.
Re: Урок 20. Анимация
tyapavel писал(а):Подскажите, пожалуйста, как создать анимацию в коде программы, без использования XML. Конкретно - translateAnimation.
Код: Выделить всё
TextView tv = (TextView) findViewById(R.id.textView1);
TranslateAnimation transAnimation= new TranslateAnimation(0, 200, 0, 200);
transAnimation.setDuration(1000);
//transAnimation.setFillAfter(true);
tv.startAnimation(transAnimation);
Re: Урок 20. Анимация
Подскажите, пожалуйста, почему не идет анимация из translate? На экране появляется квадрат, но он не реагирует на щелчок мыши(
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewTreeObserver;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
public class MainActivity extends Activity {
Animation animation ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new MyView(this));
// ImageView image = (ImageView) findViewById(R.id.image);
}
class MyView extends View {
Paint p;
// координаты для рисования квадрата
float x = 100;
float y = 100;
int side = 100;
public MyView(Context context) {
super(context);
p = new Paint();
p.setColor(Color.GREEN);
}
protected void onDraw(Canvas canvas) {
// рисуем квадрат
canvas.drawRect(x, y, x + side, y + side, p);
invalidate();
}
public boolean onTouchEvent(MotionEvent event)
{
float evX = event.getX();
float evY = event.getY();
if (evX >= x && evX <= x + side && evY >= y && evY <= y + side) {
animation = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.translate);
animation.start();
} return true;
}
}
}
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewTreeObserver;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
public class MainActivity extends Activity {
Animation animation ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new MyView(this));
// ImageView image = (ImageView) findViewById(R.id.image);
}
class MyView extends View {
Paint p;
// координаты для рисования квадрата
float x = 100;
float y = 100;
int side = 100;
public MyView(Context context) {
super(context);
p = new Paint();
p.setColor(Color.GREEN);
}
protected void onDraw(Canvas canvas) {
// рисуем квадрат
canvas.drawRect(x, y, x + side, y + side, p);
invalidate();
}
public boolean onTouchEvent(MotionEvent event)
{
float evX = event.getX();
float evY = event.getY();
if (evX >= x && evX <= x + side && evY >= y && evY <= y + side) {
animation = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.translate);
animation.start();
} return true;
}
}
}
Re: Урок 20. Анимация
Анимация ни к чему не относится. Добавьте setAnimation(animation); перед animation.start();. Тогда она будет работать с текущим View, но не с квадратом.Android писал(а):Подскажите, пожалуйста, почему не идет анимация из translate? На экране появляется квадрат, но он не реагирует на щелчок мыши(
Re: Урок 20. Анимация
damager82 писал(а):Анимация ни к чему не относится. Добавьте setAnimation(animation); перед animation.start();. Тогда она будет работать с текущим View, но не с квадратом.Android писал(а):Подскажите, пожалуйста, почему не идет анимация из translate? На экране появляется квадрат, но он не реагирует на щелчок мыши(
damager82, спасибо, заработало, по щелчку на квадрат идет анимация)))) только не понял, что значит "Тогда она будет работать с текущим View, но не с квадратом", и если что-то не так, то как реализовать c квадратом? Может быть есть у кого-нибудь исходники на подобную реализацию или что-то подобное!!
Re: Урок 20. Анимация
Может, потому, что на странице хелпа написаноPashaD писал(а):Если кому не трудно, объясните, почему не работает такая анимация?Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false" > <scale android:duration="3000" android:fromXScale="1.0" android:fromYScale="1.0" android:pivotX="50%" android:pivotY="50%" android:toXScale="0.0" android:toYScale="1.0" > </scale> <scale android:duration="3000" android:fromXScale="0.0" android:fromYScale="1.0" android:pivotX="50%" android:pivotY="50%" android:startOffset="3000" android:toXScale="1.0" android:toYScale="1.0" > </scale> </set>
Нужно только в корне размещать 1 элемент, а остальные внутри set?The file must have a single root element: either an <alpha>, <scale>, <translate>, <rotate>, or <set> element that holds a group (or groups) of other animation elements (even nested <set> elements).
Re: Урок 20. Анимация
Анимация работает с View. А нарисованный квадрат - это не View, это рисунок. Чтобы применять какие-либо трансформации к нему надо пересчитывать координаты и перерисовывать.Android писал(а):только не понял, что значит "Тогда она будет работать с текущим View, но не с квадратом", и если что-то не так, то как реализовать c квадратом? Может быть есть у кого-нибудь исходники на подобную реализацию или что-то подобное!!
Re: Урок 20. Анимация
damager82 писал(а):Анимация работает с View. А нарисованный квадрат - это не View, это рисунок. Чтобы применять какие-либо трансформации к нему надо пересчитывать координаты и перерисовывать.Android писал(а):только не понял, что значит "Тогда она будет работать с текущим View, но не с квадратом", и если что-то не так, то как реализовать c квадратом? Может быть есть у кого-нибудь исходники на подобную реализацию или что-то подобное!!
Понял, спасибо !!
Re: Урок 20. Анимация
По идее этот код должен рисовать несколько шаров и движение их. Но получаю просто белый экран. Спасибо заранее, если кто-нибудь посмотрит!
public class MainActivity extends Activity {
Random r = new Random();
ArrayList<Circle> circles = new ArrayList<Circle>();
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(new MyView(this));
}
class MyView extends View {
// private final int RADIUS = 46;
public Paint p;
public float RADIUS;
public MyView(Context context)
{
super(context);
p = new Paint();
p.setColor(Color.GREEN);
}
class Circle{
public float centerX;
public float centerY;
public int speedX;
public double speedY;
Circle (float centerX, float centerY, float RADIUS)
{
this.centerX = centerX;
this.centerY = centerY;
this.RADIUS = RADIUS;
for (int i = 0; i < 4; i++) {
Circle s = new Circle(r.nextInt(100),r.nextInt(100),r.nextInt(50));
circles.add(s);
}
}
protected void onSizeChanged(int w, int h, int oldW, int oldH)
{
centerX = w / 2;
centerY = h / 2;
}
}
protected void onDraw(Canvas c) {
int w = getWidth();
int h = getHeight();
for( int i=0; i<circles.size(); i++) {
circles.get(i).centerX += circles.get(i).speedX;
circles.get(i).centerY += circles.get(i).speedY;
float rightLimit = w - RADIUS;
float bottomLimit = h - RADIUS;
if (circles.get(i).centerX >= rightLimit) {
circles.get(i).centerX = rightLimit;
circles.get(i).speedX *= -1;
}
if (circles.get(i).centerX <= RADIUS) {
circles.get(i).centerX = RADIUS;
circles.get(i).speedX *= -1;
}
if (circles.get(i).centerY >= bottomLimit) {
circles.get(i).centerY = bottomLimit;
circles.get(i).speedY *= -1;
}
if (circles.get(i).centerY <= RADIUS) {
circles.get(i).centerY = RADIUS;
circles.get(i).speedY *= -1;
}
c.drawCircle(circles.get(i).centerX, circles.get(i).centerY, RADIUS, p );
postInvalidateDelayed(200);
}
}
}}
public class MainActivity extends Activity {
Random r = new Random();
ArrayList<Circle> circles = new ArrayList<Circle>();
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(new MyView(this));
}
class MyView extends View {
// private final int RADIUS = 46;
public Paint p;
public float RADIUS;
public MyView(Context context)
{
super(context);
p = new Paint();
p.setColor(Color.GREEN);
}
class Circle{
public float centerX;
public float centerY;
public int speedX;
public double speedY;
Circle (float centerX, float centerY, float RADIUS)
{
this.centerX = centerX;
this.centerY = centerY;
this.RADIUS = RADIUS;
for (int i = 0; i < 4; i++) {
Circle s = new Circle(r.nextInt(100),r.nextInt(100),r.nextInt(50));
circles.add(s);
}
}
protected void onSizeChanged(int w, int h, int oldW, int oldH)
{
centerX = w / 2;
centerY = h / 2;
}
}
protected void onDraw(Canvas c) {
int w = getWidth();
int h = getHeight();
for( int i=0; i<circles.size(); i++) {
circles.get(i).centerX += circles.get(i).speedX;
circles.get(i).centerY += circles.get(i).speedY;
float rightLimit = w - RADIUS;
float bottomLimit = h - RADIUS;
if (circles.get(i).centerX >= rightLimit) {
circles.get(i).centerX = rightLimit;
circles.get(i).speedX *= -1;
}
if (circles.get(i).centerX <= RADIUS) {
circles.get(i).centerX = RADIUS;
circles.get(i).speedX *= -1;
}
if (circles.get(i).centerY >= bottomLimit) {
circles.get(i).centerY = bottomLimit;
circles.get(i).speedY *= -1;
}
if (circles.get(i).centerY <= RADIUS) {
circles.get(i).centerY = RADIUS;
circles.get(i).speedY *= -1;
}
c.drawCircle(circles.get(i).centerX, circles.get(i).centerY, RADIUS, p );
postInvalidateDelayed(200);
}
}
}}
Re: Урок 20. Анимация
Проблема та же что и у Lorkn, но не могу решить.
запись в лог поставлена, метод не вызывается, строка registerForContextMenu(tv); есть
не подскажите в чем проблема может быть?
запись в лог поставлена, метод не вызывается, строка registerForContextMenu(tv); есть
не подскажите в чем проблема может быть?