添加多个 imageview 到 Flipper 并将图像从 url 加载到这些 imageview
我是 android 新手,试图对从 imageview 中的 url 加载的图像实现滑动效果...我成功了,但现在我希望应该加载多个 url,并且我可以通过滑动来一一查看它们将手指放在设备屏幕上作为覆盖整个屏幕的单个图像... 我尝试了很多 bt 未能实现.. 我不知道会使用多个图像视图......一些 for 循环和循环数组还是什么!!! 只是无能为力,因为尝试了 30 多次......
请有人帮忙......提前感谢......
这是我的代码:
package com.conn;
import android.R;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.webkit.WebView;
import android.widget.ImageView;
import android.widget.ViewFlipper;
public class swipe_touch extends Activity {
private static final String LOGID = "CHECKTHISOUT";
private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_MAX_OFF_PATH = 250;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;
private GestureDetector gestureDetector;
View.OnTouchListener gestureListener;
private Animation slideLeftIn;
private Animation slideLeftOut;
private Animation slideRightIn;
private Animation slideRightOut;
private ViewFlipper viewFlipper;
String message = "Initial Message";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.main);
//Set up viewflipper
viewFlipper = new ViewFlipper(this);
ImageView[] img = new ImageView[i];
j_comm_func funs = new j_comm_func();//already made this class
BitmapFactory.Options bmOptions;
bmOptions = new BitmapFactory.Options();
bmOptions.inSampleSize = 1;
Bitmap bm = funs.LoadImage("http://65.175.77.34/newsnow/2462011/largest3/2462011-md-hr-1.jpg", bmOptions);
img.setImageBitmap(bm);
viewFlipper.addView(img);
//set up animations
slideLeftIn = AnimationUtils.loadAnimation(this, R.anim.slide_out_right);
slideLeftOut = AnimationUtils.loadAnimation(this, R.anim.slide_in_left);
slideRightIn = AnimationUtils.loadAnimation(this, R.anim.slide_in_left);
slideRightOut = AnimationUtils.loadAnimation(this, R.anim.slide_out_right);
//put up a brownie as a starter
setContentView(viewFlipper);
gestureDetector = new GestureDetector(new MyGestureDetector());
}
public class MyGestureDetector extends SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
try {
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
return false;
// right to left swipe
if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Log.v(LOGID,"right to left swipe detected");
viewFlipper.setInAnimation(slideLeftIn);
viewFlipper.setOutAnimation(slideLeftOut);
viewFlipper.showNext();
setContentView(viewFlipper);
} // left to right swipe
else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Log.v(LOGID,"left to right swipe detected");
viewFlipper.setInAnimation(slideRightIn);
viewFlipper.setOutAnimation(slideRightOut);
viewFlipper.showPrevious();
setContentView(viewFlipper);
}
} catch (Exception e) {
// nothing
}
return false;
}
}
// This doesn't work
@Override
public boolean onTouchEvent(MotionEvent event) {
if (gestureDetector.onTouchEvent(event)){
Log.v(LOGID,"screen touched");
return true;
}
else{
return false;
}
}
}
i am new to android and was trying to implement swipe effects on images loaded from url in an imageview...and i succeeded but now i want more than one url should be loaded and i can able to see them all one by one by swiping finger on the device screen as a single image covering the whole screen...
i tried very much bt fails to implement..
i dont know more than one image view will be used....some for loop & array or what!!!
just helpless b'coz attempted more than 30 times...
pls somebody help....thanx in advance......
this is my code:
package com.conn;
import android.R;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.webkit.WebView;
import android.widget.ImageView;
import android.widget.ViewFlipper;
public class swipe_touch extends Activity {
private static final String LOGID = "CHECKTHISOUT";
private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_MAX_OFF_PATH = 250;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;
private GestureDetector gestureDetector;
View.OnTouchListener gestureListener;
private Animation slideLeftIn;
private Animation slideLeftOut;
private Animation slideRightIn;
private Animation slideRightOut;
private ViewFlipper viewFlipper;
String message = "Initial Message";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.main);
//Set up viewflipper
viewFlipper = new ViewFlipper(this);
ImageView[] img = new ImageView[i];
j_comm_func funs = new j_comm_func();//already made this class
BitmapFactory.Options bmOptions;
bmOptions = new BitmapFactory.Options();
bmOptions.inSampleSize = 1;
Bitmap bm = funs.LoadImage("http://65.175.77.34/newsnow/2462011/largest3/2462011-md-hr-1.jpg", bmOptions);
img.setImageBitmap(bm);
viewFlipper.addView(img);
//set up animations
slideLeftIn = AnimationUtils.loadAnimation(this, R.anim.slide_out_right);
slideLeftOut = AnimationUtils.loadAnimation(this, R.anim.slide_in_left);
slideRightIn = AnimationUtils.loadAnimation(this, R.anim.slide_in_left);
slideRightOut = AnimationUtils.loadAnimation(this, R.anim.slide_out_right);
//put up a brownie as a starter
setContentView(viewFlipper);
gestureDetector = new GestureDetector(new MyGestureDetector());
}
public class MyGestureDetector extends SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
try {
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
return false;
// right to left swipe
if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Log.v(LOGID,"right to left swipe detected");
viewFlipper.setInAnimation(slideLeftIn);
viewFlipper.setOutAnimation(slideLeftOut);
viewFlipper.showNext();
setContentView(viewFlipper);
} // left to right swipe
else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Log.v(LOGID,"left to right swipe detected");
viewFlipper.setInAnimation(slideRightIn);
viewFlipper.setOutAnimation(slideRightOut);
viewFlipper.showPrevious();
setContentView(viewFlipper);
}
} catch (Exception e) {
// nothing
}
return false;
}
}
// This doesn't work
@Override
public boolean onTouchEvent(MotionEvent event) {
if (gestureDetector.onTouchEvent(event)){
Log.v(LOGID,"screen touched");
return true;
}
else{
return false;
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
好吧...您的方法 onTouchEvent 不起作用,因为所有触摸事件都由 ViewFlipper 消耗(从文档到此活动的方法:
要实现你想要的东西,请看这里: 具有多个视图的 Android 触摸事件(例如 Viewfliper 中的 ListView)
在您的情况下,您应该执行以下操作:
要添加缩放功能,您可以做很多事情...我建议您这样做这以下:
像这样重写方法dispatchTouchEvent:
}
祝你好运!!
Well... your method onTouchEvent doesnt work because all touch events are consumed by ViewFlipper (from docs to this activity's method:
To implement the thing you want take a look here: Android touch events with multiple views(such as a ListView in a Viewflliper)
In your case you should do something like this:
To add zoom features you can do many things...I advise you to do the following:
Override the method dispatchTouchEvent like this:
}
Good luck !!