博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android Studio之多个Activity的滑动切换(二)
阅读量:6509 次
发布时间:2019-06-24

本文共 5831 字,大约阅读时间需要 19 分钟。

1、因为Android界面上的全部控件一般都位于Layout控件(比方RelativeLayout)之上,而布局控件能够设置响应touch事件,所以能够通过布局控件的setOnTouchListen来截获touch事件。做进一步的处理。

2、关于界面滑动。涉及到gesture的处理,而gesture(手势)是touch事件的更高一层的事件,能够将touch事件传入GestureDetector对象进行处理,而创建GestureDetector对象,要首先创建OnGestureListener对象,在OnGestureListener的OnFling函数中能够进行手势识别。

3、详细流程。

实现OnTouchListen和OnGestureListen两个抽象类,同一时候实现当中的抽象函数就可以。

(1)IntellisenseActivity中继承抽象类

(2)创建布局控件RelativeLayout的id为relativelayout

(3)代码编写

package com.design.cjc.intellisense;import android.content.Intent;import android.support.v7.app.ActionBarActivity;import android.os.Bundle;import android.view.GestureDetector;import android.view.Menu;import android.view.MenuItem;import android.view.MotionEvent;import android.view.View;import android.widget.RelativeLayout;public class IntellisenseActivity extends ActionBarActivity implements View.OnTouchListener,GestureDetector.OnGestureListener{    private RelativeLayout rl;    private GestureDetector gd;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_intellisense);        rl=(RelativeLayout)findViewById(R.id.relativelayout);        rl.setOnTouchListener(this);        rl.setLongClickable(true);          //非常重要        gd=new GestureDetector((GestureDetector.OnGestureListener)this);    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.menu_intellisense, menu);        return true;    }    @Override    public boolean onOptionsItemSelected(MenuItem item) {        // Handle action bar item clicks here. The action bar will        // automatically handle clicks on the Home/Up button, so long        // as you specify a parent activity in AndroidManifest.xml.        int id = item.getItemId();        //noinspection SimplifiableIfStatement        if (id == R.id.action_settings) {            return true;        }        return super.onOptionsItemSelected(item);    }    @Override    public boolean onDown(MotionEvent e) {        return false;    }    @Override    public void onShowPress(MotionEvent e) {    }    @Override    public boolean onSingleTapUp(MotionEvent e) {        return false;    }    @Override    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {        return false;    }    @Override    public void onLongPress(MotionEvent e) {    }    @Override    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {        //手势识别        //e1:起点信息        //e2:终点信息        //velocityX:x方向移动速度        //velocityY:y方向移动速度        final int FLING_MIN_DISTANCE=100;        final int FLING_MIN_VELOCITY=200;        if(e1.getX() - e2.getX() > FLING_MIN_DISTANCE && Math.abs(velocityX) > FLING_MIN_VELOCITY){            Intent intent = new Intent(IntellisenseActivity.this, PCCtrlActivity.class);            startActivity(intent);        }        return false;    }    @Override    public boolean onTouch(View v, MotionEvent event) {        return gd.onTouchEvent(event);         //touch事件交给GestureDetector处理        //return false;    }}

(3)
PCCtrlActivity中做与
IntellisenseActivity相近的处理

package com.design.cjc.intellisense;import android.content.Intent;import android.support.v7.app.ActionBarActivity;import android.os.Bundle;import android.view.GestureDetector;import android.view.Menu;import android.view.MenuItem;import android.view.MotionEvent;import android.view.View;import android.widget.RelativeLayout;public class PCCtrlActivity extends ActionBarActivity implements View.OnTouchListener,GestureDetector.OnGestureListener {    private RelativeLayout rl;    private GestureDetector gd;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_pcctrl);        rl=(RelativeLayout)findViewById(R.id.relativelayout);        rl.setOnTouchListener(this);        rl.setLongClickable(true);          //非常重要        gd=new GestureDetector((GestureDetector.OnGestureListener)this);    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.menu_pcctrl, menu);        return true;    }    @Override    public boolean onOptionsItemSelected(MenuItem item) {        // Handle action bar item clicks here. The action bar will        // automatically handle clicks on the Home/Up button, so long        // as you specify a parent activity in AndroidManifest.xml.        int id = item.getItemId();        //noinspection SimplifiableIfStatement        if (id == R.id.action_settings) {            return true;        }        return super.onOptionsItemSelected(item);    }    @Override    public boolean onDown(MotionEvent e) {        return false;    }    @Override    public void onShowPress(MotionEvent e) {    }    @Override    public boolean onSingleTapUp(MotionEvent e) {        return false;    }    @Override    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {        return false;    }    @Override    public void onLongPress(MotionEvent e) {    }    @Override    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {        final int FLING_MIN_DISTANCE=100;        final int FLING_MIN_VELOCITY=200;        if(e1.getX() - e2.getX() > FLING_MIN_DISTANCE && Math.abs(velocityX) > FLING_MIN_VELOCITY){            Intent intent = new Intent(PCCtrlActivity.this,IntellisenseActivity.class);            startActivity(intent);        }        return false;    }    @Override    public boolean onTouch(View v, MotionEvent event) {        return gd.onTouchEvent(event);    }}

參考文献

你可能感兴趣的文章
java jdk设置_Java如何在OS X上设置或更改默认Java(JDK)版本?
查看>>
java 枚举抽象方法_java枚举中添加抽象方法
查看>>
java 线程 this_java多线程
查看>>
leveldb java实例_leveldb的使用
查看>>
java如何获取文件路径_Java如何获取文件路径
查看>>
c 定义线程监听mysql_MySQL 线程监控 -- mymon
查看>>
java主线程跑了没效果_Java:为什么主线程没有进展?
查看>>
java可变参求平均数_6.9 接收可变数目参数的方法
查看>>
下面有关java类加载器牛客网_下面有关java classloader说法错误的是?
查看>>
JAVA db client_java – 找不到类[org.apache.derby.jdbc.ClientDriver].尝试连接到db时
查看>>
java 小于5的随机数_Java 生成随机数的 5 种方式,你知道几种?
查看>>
java中需要注意的东西_一些在JAVA中要注意的东西(3)
查看>>
python中类方法可以访问实例属性吗_[python学习心得17] 实例属性、方法和类的属性、方法...
查看>>
java 暗黑字符串_CSS变量实现暗黑模式,我的小铺页面已经支持
查看>>
java多个if语句的执行顺序_Java学习笔记-第四章 流程控制语句
查看>>
iis里运行php_让IIS也能运行PHP网页
查看>>
php tp6 错误接管分析,TP6实现原理分析系列(二):请求与响应
查看>>
php 继承类构造函数,PHP面向对象之继承构造函数
查看>>
php5.4 升级,php-5.4 升级到 php7.2
查看>>
php js json 转换包,json转换js ,php重组数组
查看>>