Страница 2 из 5
R.anim.myalpha
Добавлено: 04 окт 2012, 23:41
Quver
Как сделать, что бы myalpha.xml и другие xml с папки anim были видны в R.java ?
никак не могу понять, почему они там не прописались, и main.xml в lyaout тоже иногда для R.java недоступен (((
подскажите пожалуйста, как это побороть.
Re: Урок 20. Анимация
Добавлено: 04 окт 2012, 23:57
rezak90
Project - Clean
Re: Урок 20. Анимация
Добавлено: 05 окт 2012, 12:38
Quver
Не помогло
Сделал всё заново и заработало.
Re: Урок 20. Анимация
Добавлено: 09 окт 2012, 19:54
CLUster
Ребята,у меня почему-то работает только combo??никто не сталкивался с такой проблемой???
потому что остальное не пашет,хотя код переписывал и вручную,и пробовал копировать ничего не помогает(
Re: Урок 20. Анимация
Добавлено: 11 окт 2012, 20:30
AHAXOPET
Добрый день.
Спасибо за подробные уроки.
Не могу разобраться... Он подчеркивает 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. Анимация
Добавлено: 11 окт 2012, 23:20
AHAXOPET
AHAXOPET писал(а):
Не могу разобраться...
Извините за беспокойство, разобрался)))
Re: Урок 20. Анимация
Добавлено: 21 окт 2012, 00:57
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>
Re: Урок 20. Анимация
Добавлено: 22 окт 2012, 10:54
damager82
PashaD писал(а):Если кому не трудно, объясните, почему не работает такая анимация?
Да, непонятно.
Используйте setAnimationListener, и запускайте вторую отдельно после первой.
Re: Урок 20. Анимация
Добавлено: 24 окт 2012, 13:39
AHAXOPET
Добрый день.
Подскажите, пожалуйста, как можно оптимизировать этот код? Нужна переменная, но какая и где, не могу понять.
Тут три объекта. Радиокнопки определяют, какой именно объект анимируется. Варианты анимации выбираются из меню.
Заранее спасибо.
Код: Выделить всё
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. Анимация
Добавлено: 24 окт 2012, 17:58
damager82
AHAXOPET писал(а):Добрый день. Подскажите, пожалуйста, как можно оптимизировать этот код?
Как вариант:
Создайте метод (например startAnim), который на вход будет брать ID анимации - int.
Внутри:
- в switch определяйте по радиокнопке какой объект будете анимировать, и записывайте его в переменную view типа View
- применяйте к view анимацию, которая пришла на вход
В onOptionsItemSelected можно создать переменную int anim. Ее заполняйте в каждом case в switch, который определяет ID анимации. А после прохождения switch вызывайте метод startAnim и передавайте ему на вход anim.
Re: Урок 20. Анимация
Добавлено: 04 ноя 2012, 17:58
tyapavel
Подскажите, пожалуйста, как создать анимацию в коде программы, без использования XML. Конкретно - translateAnimation.
Re: Урок 20. Анимация
Добавлено: 06 ноя 2012, 16:35
damager82
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. Анимация
Добавлено: 08 ноя 2012, 01:32
Android
Подскажите, пожалуйста, почему не идет анимация из 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;
}
}
}
Re: Урок 20. Анимация
Добавлено: 09 ноя 2012, 11:11
damager82
Android писал(а):Подскажите, пожалуйста, почему не идет анимация из translate? На экране появляется квадрат, но он не реагирует на щелчок мыши(
Анимация ни к чему не относится. Добавьте setAnimation(animation); перед animation.start();. Тогда она будет работать с текущим View, но не с квадратом.
Re: Урок 20. Анимация
Добавлено: 09 ноя 2012, 13:17
Android
damager82 писал(а):Android писал(а):Подскажите, пожалуйста, почему не идет анимация из translate? На экране появляется квадрат, но он не реагирует на щелчок мыши(
Анимация ни к чему не относится. Добавьте setAnimation(animation); перед animation.start();. Тогда она будет работать с текущим View, но не с квадратом.
damager82, спасибо, заработало, по щелчку на квадрат идет анимация)))) только не понял, что значит "Тогда она будет работать с текущим View, но не с квадратом", и если что-то не так, то как реализовать c квадратом? Может быть есть у кого-нибудь исходники на подобную реализацию или что-то подобное!!
Re: Урок 20. Анимация
Добавлено: 14 ноя 2012, 08:42
Vic
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>
Может, потому, что на странице хелпа написано
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).
Нужно только в корне размещать 1 элемент, а остальные внутри set?
Re: Урок 20. Анимация
Добавлено: 14 ноя 2012, 12:38
damager82
Android писал(а):только не понял, что значит "Тогда она будет работать с текущим View, но не с квадратом", и если что-то не так, то как реализовать c квадратом? Может быть есть у кого-нибудь исходники на подобную реализацию или что-то подобное!!
Анимация работает с View. А нарисованный квадрат - это не View, это рисунок. Чтобы применять какие-либо трансформации к нему надо пересчитывать координаты и перерисовывать.
Re: Урок 20. Анимация
Добавлено: 14 ноя 2012, 21:31
Android
damager82 писал(а):Android писал(а):только не понял, что значит "Тогда она будет работать с текущим View, но не с квадратом", и если что-то не так, то как реализовать c квадратом? Может быть есть у кого-нибудь исходники на подобную реализацию или что-то подобное!!
Анимация работает с View. А нарисованный квадрат - это не View, это рисунок. Чтобы применять какие-либо трансформации к нему надо пересчитывать координаты и перерисовывать.
Понял, спасибо !!
Re: Урок 20. Анимация
Добавлено: 14 ноя 2012, 22:29
Android
По идее этот код должен рисовать несколько шаров и движение их. Но получаю просто белый экран. Спасибо заранее, если кто-нибудь посмотрит!
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. Анимация
Добавлено: 16 ноя 2012, 11:08
tweety
Проблема та же что и у Lorkn, но не могу решить.
запись в лог поставлена, метод не вызывается, строка registerForContextMenu(tv); есть
не подскажите в чем проблема может быть?