1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
public class CoverFlow implements OnTouchListener {
private final PageIterator pageIterator;
private final ViewGroup layout;
private View targetView;
private CoverFlowListener coverFlowListener;
private Animation anim;
/**
*/
public CoverFlow(ViewGroup layout, PageIterator imageIterator) {
this.layout = layout;
this.pageIterator = imageIterator;
setup();
}
private void setup() {
Resources resources = layout.getContext().getResources();
pageIterator.moveFirst();
Page page;
ImageView img = null;
LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT, 1f);
while (pageIterator.hasNext()) {
page = (Page) pageIterator.current();
previous = img;
img = new ImageView(layout.getContext());
img.setImageBitmap(page.getBitmap());
img.setId(page.getPageNum());
layout.addView(img, params);
pageIterator.next();
}
layout.invalidate();
layout.setOnTouchListener(this);
appear();
}
void appear()
{
anim = new AlphaAnimation(0.0f, 1.0f);
anim.setDuration(4000);
layout.startAnimation(anim);
}
void disappear()
{
anim = new AlphaAnimation(1.0f, 0.0f);
anim.setDuration(4000);
layout.startAnimation(anim);
}
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_UP:
detectView(event.getX());
getCoverFlowListener().gotoPage(targetView.getId());
break;
case MotionEvent.ACTION_MOVE:
detectView(event.getX());
targetView.bringToFront();
targetView.setScaleX(1.5f);
targetView.setScaleY(1.5f);
targetView.invalidate();
layout.invalidate();
break;
default:
}
return true;
}
/**
* detection of the view the finger is over
*/
private void detectView(float x) {
UtilsForNoob.trace("children: " + String.valueOf(layout.getChildCount()));
for(int i=0;i<layout.getChildCount();i++){
UtilsForNoob.trace("child at "+ String.valueOf(i) +" " + String.valueOf(layout.getChildAt(i).getX()) );
if(layout.getChildAt(i).getX()<= x && layout.getChildAt(i).getX()+layout.getChildAt(i).getWidth()>= x)
{
targetView = layout.getChildAt(i);
}
}
}
public CoverFlowListener getCoverFlowListener() {
return coverFlowListener;
}
public void setCoverFlowListener(CoverFlowListener coverFlowListener) {
this.coverFlowListener = coverFlowListener;
}
} |
Partager