小妹请问ImageView切换图片拖动效果
小妹请教ImageView切换图片拖动效果
我用ImageView做了一个由左向右滑动,换图片的程序.
我想问一下,在切换过程中,怎么能做到很平滑的过去,
而且有拖动效果,就是在手指慢慢拖过去的过程中,第二张图片慢慢的覆盖屏幕。
第一张图片在消失!不知道我描述清楚了吗!就是拖动效果!
或者大家有什么好的思路,请指点我!
嘿嘿~~ 贴上代码!
------解决方案--------------------
做成一个listview不行吗 可以实现你所描述的拖动效果的 呵呵
------解决方案--------------------
if((e1.getX()-e2.getX()>200) && (Math.abs(vx)>50))
你的代码第一个参数,就已经决定了不可能慢慢出来的,要滑动结束后 e1 e2确定了才会setImageRes
我用ImageView做了一个由左向右滑动,换图片的程序.
我想问一下,在切换过程中,怎么能做到很平滑的过去,
而且有拖动效果,就是在手指慢慢拖过去的过程中,第二张图片慢慢的覆盖屏幕。
第一张图片在消失!不知道我描述清楚了吗!就是拖动效果!
或者大家有什么好的思路,请指点我!
嘿嘿~~ 贴上代码!
- Java code
package com.imageview.test.demo; import android.app.Activity; import android.os.Bundle; import android.view.GestureDetector; import android.view.GestureDetector.SimpleOnGestureListener; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.widget.ImageView; import android.widget.Toast; public class MainActivity extends Activity implements OnTouchListener{ private ImageView imageView01; private GestureDetector gd;//用于捕捉touch的详细手势(gesture) int count=0; private int[] resIds = new int[] { R.drawable.anim_a, R.drawable.anim_b, R.drawable.anim_c,R.drawable.anim_d }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); imageView01=(ImageView)findViewById(R.id.imageView01); imageView01.setImageResource(resIds[0]); gd = new GestureDetector (this, new GDetector()); //创建一个GestureDetector实例,下文重写其onFling()方法 imageView01.setOnTouchListener(this); //这里如果没有 implements OnTouchListener 会报错 imageView01.setLongClickable(true);//不加这个滑动就没反应了 } public class GDetector extends SimpleOnGestureListener //GDetector 名字是随便起的 { //MotionEvent e1 按下时的状态,位置 //MotionEvent e2, //松手时的状态,位置 //float vx,//x坐标的移动速度,单位: px/秒 //float y坐标的移动速度 @Override public boolean onFling(MotionEvent e1,MotionEvent e2, float vx,float vy) { //滑动速度足够快至少50点/秒,手指起落点减起点是正值且>200 判断属于向左滑动 if((e1.getX()-e2.getX()>200) && (Math.abs(vx)>50)) { count++; imageView01.setImageResource(resIds[count]); Toast.makeText(MainActivity.this, "count:"+count, 1000).show(); }/*else if ((e2.getX()-e1.getX()>200) && (Math.abs(vx)>50)) //同理判断是向右滑动 { count--; imageView01.setImageResource(resIds[0]); Toast.makeText(MainActivity.this, "count:"+count, 1000).show(); }*/ return false; } } @Override public boolean onTouch(View v, MotionEvent event) { return gd.onTouchEvent(event); } }
- XML code
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ImageView android:id="@+id/imageView01" android:layout_height="fill_parent" android:layout_width="fill_parent" android:layout_centerInParent="true"> </ImageView> </LinearLayout>
------解决方案--------------------
做成一个listview不行吗 可以实现你所描述的拖动效果的 呵呵
------解决方案--------------------
if((e1.getX()-e2.getX()>200) && (Math.abs(vx)>50))
你的代码第一个参数,就已经决定了不可能慢慢出来的,要滑动结束后 e1 e2确定了才会setImageRes