Hi.
Hi have an absolute layout with pictures.
Only 2 pictures are show simultaneously. Others are on the layout, but
out of view.
I wan't on user click to show others picture.
For this, I do an animation to translate the layer.
For translation from right to left, it works correctly : an other
picture come from right progressively while another exit on left side.
But, for translation from left to right, it don't work : the right
picture exits correctly on right side, but left picture only appear on
left side at the end of the animation.
while translating, an empty space appear on left until the end of
translation.
For translating, I make my own animation (not taken from XML because it
depends on image size) :
scrollLeft = new TranslateAnimation(0, -(pictoWidth+hspace), 0, 0);
scrollLeft.setDuration(300);
scrollLeft.setAnimationListener(this);
scrollRight = new TranslateAnimation(0, (pictoWidth+hspace), 0, 0);
scrollRight.setDuration(300);
scrollRight.setAnimationListener(this);
then, for translating, I do :
layout.startAnimation(scrollRight);
(I join the widget source in case somebody is interesting on doing the
same thing ...)
Does somebody have any idea how tohave the same effect on left to right
scroll than right to left ?
Thanks in advance.
Mike
PS: I can't use filpper because I have to picture visible at the same
time and only one disappear at a time.
It ould be possible but more complicated I thing ...
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---
package mba.android.widgets;
import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.view.animation.Animation.AnimationListener;
import android.widget.AbsoluteLayout;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import com.fnacspectacles.android.R;
public class MbaFlipper extends FrameLayout implements AnimationListener {
private ImageButton[] buttons = null;
private AbsoluteLayout layout = null;
private Animation scrollLeft, scrollRight;
private boolean wasNext = false;
public MbaFlipper(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public MbaFlipper(Context context) {
super(context);
init();
}
public int getNbManifs() {
return 8;
}
private int pictoWidth=65, pictoHeight=80, hspace = 20, border = 1, vspace = 3, offset = hspace / 2;
/**
* Appelé au début pour initialiser les vues.
* Ensuite, il faudra appeler update avec les infos spécifiques à la manif.
*/
private void init() {
layout = new AbsoluteLayout(getContext());
LayoutParams paramsLayout = new LayoutParams(getNbManifs()*(pictoWidth+hspace+2*border), LayoutParams.FILL_PARENT);
addView(layout, paramsLayout);
layout.setPadding(-1 * (pictoWidth+hspace+2*border), 0, 0, 0);
buttons = new ImageButton[getNbManifs()];
for (int i=0; i<getNbManifs(); i++) {
buttons[i]=new ImageButton(getContext());
buttons[i].setImageResource(R.drawable.wait);
buttons[i].setId(i);
buttons[i].setBackgroundColor(Color.GRAY);
buttons[i].setPadding(0, 0, 0, 0);
layout.addView(buttons[i], getPictoLayout(i));
}
scrollLeft = new TranslateAnimation(0, -(pictoWidth+hspace), 0, 0);
scrollLeft.setDuration(300);
scrollLeft.setAnimationListener(this);
scrollRight = new TranslateAnimation(0, (pictoWidth+hspace), 0, 0);
scrollRight.setDuration(300);
scrollRight.setAnimationListener(this);
}
@Override
public void setOnClickListener(OnClickListener l) {
for (ImageButton i : buttons) {
i.setOnClickListener(l);
}
}
public void setIndex(int idx, String imghref) {
// removed : code to lazy load image from href
}
public void next() {
wasNext = true;
layout.startAnimation(scrollLeft);
}
public void prev() {
wasNext=false;
layout.startAnimation(scrollRight);
}
private AbsoluteLayout.LayoutParams getPictoLayout(int i) {
return new AbsoluteLayout.LayoutParams(pictoWidth+3*border/2, pictoHeight+2*border, getOffsetIdx(i), 0);
}
private int getOffsetIdx(int idx) {
return offset + idx*(pictoWidth+hspace);
}
@Override
public void onAnimationEnd(Animation animation) {
if (wasNext) {
// On deplace le premier à la fin
ImageButton b = buttons[0];
for (int i=1; i<buttons.length; i++) {
buttons[i-1]=buttons[i];
}
buttons[buttons.length-1]=b;
} else {
// l'inverse
ImageButton b = buttons[buttons.length-1];
for (int i=buttons.length-1; i>0; i--) {
buttons[i]=buttons[i-1];
}
buttons[0]=b;
}
for (int i=0; i<buttons.length; i++) {
buttons[i].setLayoutParams(getPictoLayout(i));
}
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationStart(Animation animation) {
}
}