GestureDetector、手势、左右滑动控制图片大小-创新互联

GestureDetector手势,这个应用很广泛,也可以衍生初很多知识点,我从基础开始写起,原来一直想学一些高含量的技术,后来发现很多基础知识点都没完全理解,每当遇到不明白的小知识点的时候还要上网查,用过一次两次还记不住,好高骛远,踏踏实实把每个知识点的所有角角落落的零碎知识整理一下,基础扎实才会飞的更高;

创新互联一直在为企业提供服务,多年的磨炼,使我们在创意设计,网络营销推广到技术研发拥有了开发经验。我们擅长倾听企业需求,挖掘用户对产品需求服务价值,为企业制作有用的创意设计体验。核心团队拥有超过十余年以上行业经验,涵盖创意,策化,开发等专业领域,公司涉及领域有基础互联网服务珉田数据中心重庆APP开发公司、手机移动建站、网页设计、网络整合营销。

    下面把GestureDetector的生命周期代码运行一边,看具体代码:

public class MainActivity extends Activity implements OnGestureListener {

private GestureDetector gesture ;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

gesture = new GestureDetector(this) ;

}

@Override

public boolean onTouchEvent(MotionEvent event) {

return gesture.onTouchEvent(event) ;

}

@Override

public boolean onDown(MotionEvent arg0) {

System.out.println("******===>onDowm");

return false;

}

@Override

public boolean onFling(MotionEvent event1, MotionEvent event2, float x,

float y) {

System.out.println("******===>onFling");

return false;

}

@Override

public void onLongPress(MotionEvent arg0) {

System.out.println("******===>onLongPress");

}

@Override

public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float arg2,

float arg3) {

System.out.println("******===>onScroll");

return false;

}

@Override

public void onShowPress(MotionEvent arg0) {

System.out.println("******===>onShowPress");

}

@Override

public boolean onSingleTapUp(MotionEvent arg0) {

System.out.println("******===>onSingleTapUp");

return false;

}

}

    运行之后经过测试可以发现:当用户按下的时候会首先执行onDown方法,onSingleTapUp是点击一下之后马上抬起按钮所触动的方法,onShowPress是点击之后所执行的方法(点击之后手机不挪动);onLongPress是点击之后过段时间所执行的方法,是在手指不拖动的前提之下,如果手指不挪动,执行顺序是:onDown--》onShowPrsss--》onLongPress。onScorll是手指滚动的时候所触发的方法,onFling是拖过多触发的方法,其中的参数就是拖过的x个y的值得变化,手机点击屏幕之后从屏幕的开始拖出屏幕所触发的方法顺序是:onDown--》onScorll--》onFling

    下面写一个关于手势左右滑动动态控制图片大小的demo,直接上代码,有详细注释

public class MainActivity extends Activity implements OnGestureListener {

private GestureDetector gesture;

private ImageView p_w_picpath;

private int width, height;// 宽和高

private Bitmap bitmap;// 初始化图片资源

private Matrix matrix;

private float currentScale = 1;//记录缩放比例

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

p_w_picpath = (ImageView) findViewById(R.id.p_w_picpath);

gesture = new GestureDetector(this);

matrix = new Matrix();

bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.one);

width = bitmap.getWidth() ;

height = bitmap.getHeight() ;

// p_w_picpath.setImageBitmap(bitmap);

p_w_picpath.setImageBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.one));

}

@Override

public boolean onTouchEvent(MotionEvent event) {

// 把触摸时间交给GestureDetector

return gesture.onTouchEvent(event);

}

@Override

public boolean onDown(MotionEvent arg0) {

return false;

}

@Override

public boolean onFling(MotionEvent event1, MotionEvent event2, float x,

float y) {

//判断横向的挪动速度

x = x > 4000 ? 4000 : x;

x = x < -4000 ? -4000 : x;

currentScale += currentScale * x / 4000.0f;

// 保证currentScale不会等于0

currentScale = currentScale > 0.01 ? currentScale : 0.01f;

matrix.reset(); //重置matrix

//缩放matrix

matrix.setScale(currentScale, currentScale, 160, 200);

BitmapDrawable tmp = (BitmapDrawable) p_w_picpath.getDrawable() ;

//如果还没回收则强制回收

if(!tmp.getBitmap().isRecycled()){

tmp.getBitmap().recycle() ;

}

//根据原始位图和matrix进行创建新图片

Bitmap bitmap2 = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true) ;

p_w_picpath.setImageBitmap(bitmap2);

return true ;

}

@Override

public void onLongPress(MotionEvent arg0) {

}

@Override

public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float arg2,

float arg3) {

return false;

}

@Override

public void onShowPress(MotionEvent arg0) {

}

@Override

public boolean onSingleTapUp(MotionEvent arg0) {

return false;

}

}

xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

  xmlns:tools="http://schemas.android.com/tools"

  android:layout_width="match_parent"

  android:layout_height="match_parent" >

  <ImageView

    android:id="@+id/p_w_picpath"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_centerInParent="true" />

</RelativeLayout>

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。

名称栏目:GestureDetector、手势、左右滑动控制图片大小-创新互联
分享URL:https://www.cdcxhl.com/article4/dpgeie.html

成都网站建设公司_创新互联,为您提供微信小程序定制开发网站排名网站维护网站建设手机网站建设

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

h5响应式网站建设