android Gallery点击 跳到ViewFlipper全屏显示图片
2013-09-17 18:32
531 查看
当我们用Gallery来显示一张图片的时候,往往需要点击查看其放太效果,网上有很多方法大部分是利用动画实现,现在介绍一种其它的方法来实现,给Gallery设置ItemClick事件,跳到相应的ViewFlipper来实现Gallery的图片左右滑动。
public class ShowImagesActivity extends Activity implements
android.view.GestureDetector.OnGestureListener {
private static final int SLIDE_RANGE = 100;
private static final int AUTO_SLIDE_TIME = 5;
private GestureDetector gestureDetector = null;
private ViewFlipper viewFlipper = null;
private Activity mActivity = null;
private AsyncPhoneLoader mImageLoader;
private int mFiSize = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_filpper_layout);
Intent intent = getIntent();
@SuppressWarnings("unchecked")
ArrayList<String> imgesList = (ArrayList<String>) intent.getExtras().get("imgList");
mFiSize = imgesList.size();
int curPos = intent.getIntExtra("position", 0);
mImageLoader = new AsyncPhoneLoader();
mActivity = this;
viewFlipper = (ViewFlipper) findViewById(R.id.viewFlipper);
gestureDetector = new GestureDetector(this);
loadImages(imgesList, curPos);
viewFlipper.setDisplayedChild(curPos); //当前显示的图片位置
viewFlipper.setAutoStart(true);
viewFlipper.setFlipInterval(AUTO_SLIDE_TIME * 1000);
if (viewFlipper.isAutoStart() && !viewFlipper.isFlipping()) {
viewFlipper.startFlipping();
}
}
/**
* async loading the images
*
* @param urlList
* @param pos
*/
private void loadImages(ArrayList<String> urlList, int pos) {
for (int i = 0; i < urlList.size(); i++) {
final ImageView imageView = new ImageView(this);
Drawable drawable = null;
drawable = mImageLoader.loadDrawable(urlList.get(i), mActivity, false,
new ImageCallback() {
@Override
public void imageLoaded(Drawable imageDrawable, String imageUrl) {
if (imageDrawable != null) {
imageView.setImageDrawable(imageDrawable);
} else {
imageView.setImageResource(R.drawable.photo_empty);
}
}
});
if (drawable == null) {
imageView.setImageResource(R.drawable.photo_load);
} else {
imageView.setImageDrawable(drawable);
}
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
viewFlipper.addView(imageView, new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT));
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
viewFlipper.stopFlipping();
viewFlipper.setAutoStart(false);
return gestureDetector.onTouchEvent(event);
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
if (e2.getX() - e1.getX() > SLIDE_RANGE) {
if (viewFlipper.getDisplayedChild() == 0) { //滑动到第一张不能再向左滑动
viewFlipper.stopFlipping();
return false;
} else {
Animation rightInAnim = AnimationUtils.loadAnimation(mActivity, R.anim.in_leftright);
Animation rightOutAnim = AnimationUtils.loadAnimation(mActivity, R.anim.out_leftright);
viewFlipper.setInAnimation(rightInAnim);
viewFlipper.setOutAnimation(rightOutAnim);
viewFlipper.showPrevious();
return true;
}
} else if (e2.getX() - e1.getX() < -SLIDE_RANGE) {
if (viewFlipper.getDisplayedChild() == mFiSize - 1) { //滑动到最后一张不能再向右滑动
viewFlipper.stopFlipping();
return false;
} else {
Animation lInAnim = AnimationUtils.loadAnimation(mActivity, R.anim.in_rightleft);
Animation lOutAnim = AnimationUtils.loadAnimation(mActivity, R.anim.out_rightleft);
viewFlipper.setInAnimation(lInAnim);
viewFlipper.setOutAnimation(lOutAnim);
viewFlipper.showNext();
return true;
}
}
return true;
}
@Override
public boolean onDown(MotionEvent e) {
return false;
}
@Override
public void onLongPress(MotionEvent e) {
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
return false;
}
@Override
public void onShowPress(MotionEvent e) {
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
return false;
}
进出的动画可以自己随便设置
类似:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="500"
android:fromXDelta="-100%p"
android:toXDelta="0" />
</set>
这样就能实现了
public class ShowImagesActivity extends Activity implements
android.view.GestureDetector.OnGestureListener {
private static final int SLIDE_RANGE = 100;
private static final int AUTO_SLIDE_TIME = 5;
private GestureDetector gestureDetector = null;
private ViewFlipper viewFlipper = null;
private Activity mActivity = null;
private AsyncPhoneLoader mImageLoader;
private int mFiSize = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_filpper_layout);
Intent intent = getIntent();
@SuppressWarnings("unchecked")
ArrayList<String> imgesList = (ArrayList<String>) intent.getExtras().get("imgList");
mFiSize = imgesList.size();
int curPos = intent.getIntExtra("position", 0);
mImageLoader = new AsyncPhoneLoader();
mActivity = this;
viewFlipper = (ViewFlipper) findViewById(R.id.viewFlipper);
gestureDetector = new GestureDetector(this);
loadImages(imgesList, curPos);
viewFlipper.setDisplayedChild(curPos); //当前显示的图片位置
viewFlipper.setAutoStart(true);
viewFlipper.setFlipInterval(AUTO_SLIDE_TIME * 1000);
if (viewFlipper.isAutoStart() && !viewFlipper.isFlipping()) {
viewFlipper.startFlipping();
}
}
/**
* async loading the images
*
* @param urlList
* @param pos
*/
private void loadImages(ArrayList<String> urlList, int pos) {
for (int i = 0; i < urlList.size(); i++) {
final ImageView imageView = new ImageView(this);
Drawable drawable = null;
drawable = mImageLoader.loadDrawable(urlList.get(i), mActivity, false,
new ImageCallback() {
@Override
public void imageLoaded(Drawable imageDrawable, String imageUrl) {
if (imageDrawable != null) {
imageView.setImageDrawable(imageDrawable);
} else {
imageView.setImageResource(R.drawable.photo_empty);
}
}
});
if (drawable == null) {
imageView.setImageResource(R.drawable.photo_load);
} else {
imageView.setImageDrawable(drawable);
}
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
viewFlipper.addView(imageView, new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT));
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
viewFlipper.stopFlipping();
viewFlipper.setAutoStart(false);
return gestureDetector.onTouchEvent(event);
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
if (e2.getX() - e1.getX() > SLIDE_RANGE) {
if (viewFlipper.getDisplayedChild() == 0) { //滑动到第一张不能再向左滑动
viewFlipper.stopFlipping();
return false;
} else {
Animation rightInAnim = AnimationUtils.loadAnimation(mActivity, R.anim.in_leftright);
Animation rightOutAnim = AnimationUtils.loadAnimation(mActivity, R.anim.out_leftright);
viewFlipper.setInAnimation(rightInAnim);
viewFlipper.setOutAnimation(rightOutAnim);
viewFlipper.showPrevious();
return true;
}
} else if (e2.getX() - e1.getX() < -SLIDE_RANGE) {
if (viewFlipper.getDisplayedChild() == mFiSize - 1) { //滑动到最后一张不能再向右滑动
viewFlipper.stopFlipping();
return false;
} else {
Animation lInAnim = AnimationUtils.loadAnimation(mActivity, R.anim.in_rightleft);
Animation lOutAnim = AnimationUtils.loadAnimation(mActivity, R.anim.out_rightleft);
viewFlipper.setInAnimation(lInAnim);
viewFlipper.setOutAnimation(lOutAnim);
viewFlipper.showNext();
return true;
}
}
return true;
}
@Override
public boolean onDown(MotionEvent e) {
return false;
}
@Override
public void onLongPress(MotionEvent e) {
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
return false;
}
@Override
public void onShowPress(MotionEvent e) {
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
return false;
}
进出的动画可以自己随便设置
类似:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="500"
android:fromXDelta="-100%p"
android:toXDelta="0" />
</set>
这样就能实现了
相关文章推荐
- android viewflipper 解决屏幕翻转后图片显示为点击进入图片
- Android TextView 显示网络图片,点击放大
- Android开发全程记录(八)——设置ImageView显示的图片铺满全屏(适应魅族等不常见屏幕比例)
- 【转】Android 使用ViewPager实现类似gallery画廊的效果(画廊效果之ViewPager显示多个图片)
- Android中Textview显示Html,图文混排,支持图片点击放大
- Android中Textview显示Html,图文混排,支持图片点击放大
- android 上的imageview 图片全屏显示
- android viewflipper 左右滑动切换显示图片效果
- Android深入浅出系列之实例应用—简单的手指拖动图片,图片滑来滑去显示应用Gallery和BaseAdapter以及ImageView的使用
- Android 使用ViewPager实现类似gallery画廊的效果(画廊效果之ViewPager显示多个图片)
- Android实现点击ImageView拍照,并将相机拍摄的图片显示在ImageView上
- Android深入浅出系列之实例应用—简单的手指拖动图片,图片滑来滑去显示应用Gallery和BaseAdapter以及ImageView的使用
- Android点击图片显示大图,长按保存网络图片到本地相册,单击返回。(GestureDetector)(RxJava)(Easypermissions)(AlertView)
- Android ImageView图片放大到全屏显示
- Android 在ViewPager中使用的可以画线,放大,保存,点击删除线条的自定义图片显示控件
- Android深入浅出系列之实例应用—简单的手指拖动图片,图片滑来滑去显示应用Gallery和BaseAdapter以及ImageView的使用
- Android TextView中显示图片的4种方式
- android从手机内存获得图片并全屏显示
- android之TextView使用HTML处理字体样式、显示图片等
- android - 滑动效果之ViewFlipper与ViewPager与Gallery