У меня следующая проблема: я создал пользовательский вид на Android. Я хочу, чтобы представление пульсировало с помощью масштабной анимации (pivotX="50%" и pivotY="50%"). Если представление размещено в середине экрана, масштабирование работает нормально. Если представление размещено в левой части экрана, похоже, что значение pivotX будет равно «75%». Если представление размещено в правой части экрана, похоже, что значение pivotX будет равно «25%».
Вот код моего представления:
public class TestView extends View
{
private Paint _paint = new Paint();
private int _x, _y;
public TestView( Context context, int x, int y )
{
super( context );
_x = x;
_y = y;
_paint.setAntiAlias( true );
_paint.setColor( Color.BLUE );
_paint.setStyle( Style.FILL );
}
@Override
protected void onDraw( Canvas canvas )
{
super.onDraw( canvas );
canvas.drawCircle( _x, _y, 100 , _paint );
}
}
Вот код файла анимации pulse.xml:
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="100"
android:fromXScale="1"
android:fromYScale="1"
android:pivotX="50%"
android:pivotY="50%"
android:repeatCount="3"
android:repeatMode="reverse"
android:toXScale="1.7"
android:toYScale="1.7" >
</scale>
Код класса фрагмента:
ViewGroup mainLayout = (ViewGroup) getView().findViewById( R.id.my_layout );
float y = screenHeigth / 2;
float x1 = screenWidth*3/4; // right hand side of the screen
dest1 = new TestView( getActivity(), x1, y );
mainLayout.addView( dest1 );
float x2 = screenWidth / 2; // in the middle of the screen
dest2 = new TestView( getActivity(), x2, y );
mainLayout.addView( dest2 );
float x3 = screenWidth / 4; // left hand side of the screen
dest3 = new TestView( getActivity(), x3, y );
mainLayout.addView( dest3 );
ScaleAnimation pulse = (ScaleAnimation) AnimationUtils.loadAnimation( getActivity(), R.anim.pulse );
dest1.startAnimation( pulse );
dest2.startAnimation( pulse );
dest3.startAnimation( pulse );
Что я делаю неправильно? Возможно, мне нужно что-то сделать в моем классе TestView?