如何在android中控制viewflipper中的图像?
我开发了一个应用程序,在其中我实现了如何在android中控制viewflipper中的图像?,android,viewflipper,Android,Viewflipper,我开发了一个应用程序,在其中我实现了ontouchlistener,我可以用手指触摸来交换图像。但问题是,当图像交换且最后一个图像到达时,当我交换手指拖动图像时,它会显示第一个图像。我想在最后一个图像出现或出现时停止图像交换不应该从lat到first我该怎么办 public class Touch extends Activity implements OnTouchListener { float downXValue; private static final String TAG
ontouchlistener
,我可以用手指触摸来交换图像。但问题是,当图像交换且最后一个图像到达时,当我交换手指拖动图像时,它会显示第一个图像。我想在最后一个图像出现或出现时停止图像交换不应该从lat到first我该怎么办
public class Touch extends Activity implements OnTouchListener {
float downXValue;
private static final String TAG = "Touch";
// These matrices will be used to move and zoom image
Matrix matrix = new Matrix();
Matrix savedMatrix = new Matrix();
// We can be in one of these 3 states
static final int NONE = 0;
static final int DRAG = 1;
static final int ZOOM = 2;
int mode = NONE;
// Remember some things for zooming
PointF start = new PointF();
PointF mid = new PointF();
float oldDist = 1f;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set main.XML as the layout for this Activity
setContentView(R.layout.main);
// Add these two lines
LinearLayout lay = (LinearLayout) findViewById(R.id.lays);
lay.setOnTouchListener((OnTouchListener) this);
}
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
// Get the action that was done on this touch event
switch (arg1.getAction())
{
case MotionEvent.ACTION_DOWN:
{
// store the X value when the user's finger was pressed down
downXValue = arg1.getX();
break;
}
case MotionEvent.ACTION_UP:
{
// Get the X value when the user released his/her finger
float currentX = arg1.getX();
// going backwards: pushing stuff to the right
if (downXValue < currentX)
{
// Get a reference to the ViewFlipper
ViewFlipper vf = (ViewFlipper) findViewById(R.id.details);
// Set the animation
// vf.setAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_out));
// Flip!
vf.showPrevious();
}
// going forwards: pushing stuff to the left
if (downXValue > currentX)
{
// Get a reference to the ViewFlipper
ViewFlipper vf = (ViewFlipper) findViewById(R.id.details);
// Set the animation
// vf.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_in));
// Flip!
vf.showNext();
}
break;
}
case MotionEvent.ACTION_MOVE:
if (mode == DRAG) {
// ...
matrix.set(savedMatrix);
matrix.postTranslate(arg1.getX() - start.x,
arg1.getY() - start.y);
}
else if (mode == ZOOM) {
float newDist = spacing(arg1);
Log.d(TAG, "newDist=" + newDist);
if (newDist > 10f) {
matrix.set(savedMatrix);
float scale = newDist / oldDist;
matrix.postScale(scale, scale, mid.x, mid.y);
}
}
break;
}
// view.setImageMatrix(matrix);
return true; // indicate event was handled
}
/** Show an event in the LogCat view, for debugging */
private void dumpEvent(MotionEvent arg1) {
String names[] = { "DOWN", "UP", "MOVE", "CANCEL", "OUTSIDE",
"POINTER_DOWN", "POINTER_UP", "7?", "8?", "9?" };
StringBuilder sb = new StringBuilder();
int action = arg1.getAction();
int actionCode = action & MotionEvent.ACTION_MASK;
sb.append("event ACTION_").append(names[actionCode]);
if (actionCode == MotionEvent.ACTION_POINTER_DOWN
|| actionCode == MotionEvent.ACTION_POINTER_UP) {
sb.append("(pid ").append(
action >> MotionEvent.ACTION_POINTER_ID_SHIFT);
sb.append(")");
}
sb.append("[");
for (int i = 0; i < arg1.getPointerCount(); i++) {
sb.append("#").append(i);
sb.append("(pid ").append(arg1.getPointerId(i));
sb.append(")=").append((int) arg1.getX(i));
sb.append(",").append((int) arg1.getY(i));
if (i + 1 < arg1.getPointerCount())
sb.append(";");
}
sb.append("]");
Log.d(TAG, sb.toString());
}
/** Determine the space between the first two fingers */
private float spacing(MotionEvent event) {
float x = event.getX(0) - event.getX(1);
float y = event.getY(0) - event.getY(1);
return FloatMath.sqrt(x * x + y * y);
}
/** Calculate the mid point of the first two fingers */
private void midPoint(PointF point, MotionEvent event) {
float x = event.getX(0) + event.getX(1);
float y = event.getY(0) + event.getY(1);
point.set(x / 2, y / 2);
}
}
public类Touch扩展了活动实现到TouchListener上{
浮动下降值;
私有静态最终字符串TAG=“Touch”;
//这些矩阵将用于移动和缩放图像
矩阵=新矩阵();
矩阵savedMatrix=新矩阵();
//我们可能处于这三种状态之一
静态最终int NONE=0;
静态最终整数阻力=1;
静态最终整数缩放=2;
int模式=无;
//记住一些关于缩放的事情
PointF start=新的PointF();
PointF mid=新的PointF();
浮动oldDist=1f;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//将main.XML设置为此活动的布局
setContentView(R.layout.main);
//把这两行加起来
LinearLayout Layout=(LinearLayout)findViewById(R.id.Layes);
lay.setOnTouchListener((OnTouchListener)this);
}
@凌驾
公共布尔onTouch(视图arg0、运动事件arg1){
//获取在此触摸事件上执行的操作
开关(arg1.getAction())
{
case MotionEvent.ACTION\u DOWN:
{
//当按下用户的手指时,存储X值
downXValue=arg1.getX();
打破
}
case MotionEvent.ACTION\u UP:
{
//获取用户释放手指时的X值
float currentX=arg1.getX();
//倒退:把东西往右边推
如果(向下X值<当前X)
{
//获取对ViewFlipper的引用
ViewFlipper vf=(ViewFlipper)findViewById(R.id.details);
//设置动画
//setAnimation(AnimationUtils.loadAnimation(this,R.anim.push_left_out));
//翻转!
vf.showPrevious();
}
//向前:把东西推到左边
如果(向下X值>当前X)
{
//获取对ViewFlipper的引用
ViewFlipper vf=(ViewFlipper)findViewById(R.id.details);
//设置动画
//设置动画(AnimationUtils.loadAnimation(这个,R.anim.push_left_in));
//翻转!
vf.showNext();
}
打破
}
case MotionEvent.ACTION\u移动:
如果(模式==拖动){
// ...
矩阵集(savedMatrix);
postTranslate(arg1.getX()-start.x,
arg1.getY()-start.y);
}
else if(模式==缩放){
float newDist=间距(arg1);
Log.d(标记“newDist=“+newDist”);
如果(新距离>10f){
矩阵集(savedMatrix);
浮动比例=新距离/旧距离;
矩阵。后标度(标度、标度、中x、中y);
}
}
打破
}
//视图.setImageMatrix(矩阵);
返回true;//指示事件已处理
}
/**在LogCat视图中显示事件以进行调试*/
私有无效转储事件(MotionEvent arg1){
字符串名称[]={“向下”、“向上”、“移动”、“取消”、“外部”,
“指针向下”、“指针向上”、“7?”、“8?”、“9?”;
StringBuilder sb=新的StringBuilder();
int action=arg1.getAction();
int actionCode=action&MotionEvent.action\u掩码;
附加(名称[动作代码]);
如果(actionCode==MotionEvent.ACTION\u指针\u向下
||actionCode==MotionEvent.ACTION(指针向上){
某人追加(“(pid”)。追加(
动作>>MotionEvent.action\u指针\u ID\u移位);
某人加上(“)”;
}
某人加上(“[”);
对于(int i=0;i
提前感谢在您的代码中创建一个
计数器
并分别在showNext
和showPrevious
处递增和递减。像下面这样
if (downXValue < currentX)
{
ViewFlipper vf = (ViewFlipper) findViewById(R.id.details);
if(counter > 0)
{
vf.showPrevious();
counter--;
}
}
// going forwards: pushing stuff to the left
if (downXValue > currentX)
{
// Get a reference to the ViewFlipper
ViewFlipper vf = (ViewFlipper) findViewById(R.id.details);
if(counter < 20)
{
vf.showNext();
counter++;
}
}
if(downXValue0)
{
vf.showPrevious();
计数器--;
}
}
//向前:把东西推到左边
如果(向下X值>当前X)
{
//获取对ViewFlipper的引用
视窗翻转器v
if(vf.getId() != vf.getChildAt(vf.getChildCount()-1).getId())