为没有手势的控件(ViewFlipper) 添加手势

xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"    android:layout_height="match_parent" tools:context="com.example.mygesture.MainActivity">        <ViewFlipper        android:layout_width="match_parent"        android:layout_height="match_parent"        android:id="@+id/vf_main_one"        >ViewFlipper>LinearLayout>


Activity

控件中,我放入的是手机内存中的所有图片,所有必须先获取读取的权限

在 AndroidManifest.xml 文件中获取权限

 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE">uses-permission>
package com.example.mygesture;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Environment;import android.os.PatternMatcher;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.GestureDetector;import android.view.MotionEvent;import android.widget.ImageView;import android.widget.Toast;import android.widget.ViewFlipper;import java.io.InputStream;import java.util.LinkedList;import java.util.List;import java.util.regex.Matcher;import java.util.regex.Pattern;public class MainActivity extends AppCompatActivity {    private ViewFlipper viewFlipper;    private List list=new LinkedList<>();    private GestureDetector jc;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);//取到控件viewFlipper = (ViewFlipper)findViewById(R.id.vf_main_one);  //判断内存卡,是否可用       if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){  //取到内存卡的绝对路径            String  abspath=Environment.getExternalStorageDirectory().getAbsolutePath();          //建立文件对象            File file=new File(abspath);            //取到内存卡内的所有文件、文件夹            File [] filetwo=file.listFiles();            for (File file1 : filetwo) {                try {                  //调用文件的递归方法                    TraversalSearch(file1);                } catch (IOException e) {                    e.printStackTrace();                }            }        }        //集合中的图片是,内存卡内的所有图片        for (ImageView imageView : list) {        //把集合中的所有图片加入到(ViewFlipper)控件中            viewFlipper.addView(imageView);        }      //建立手势检测器,参数一:上下文  参数二 检测器的检测事件        jc = new GestureDetector(this,new GestureDetector.OnGestureListener(){            @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) {//本方法,参数一:起始位置 参数二:结束位置 ,参数三四:x轴 y轴                            if(e2.getX()-e1.getX()>200){                    //显示上一张                    viewFlipper.showPrevious();                    Toast.makeText(MainActivity.this, "     001", Toast.LENGTH_SHORT).show();                }                if(e1.getX()-e2.getX()>200){                    //显示下一张                    viewFlipper.showNext();                    Toast.makeText(MainActivity.this, "     004", Toast.LENGTH_SHORT).show();                }                return false;            }        });    }    @Override  //重写  触摸 回调函数    public boolean onTouchEvent(MotionEvent event) {        //给手势检测器设定触摸函数,必写!        return jc.onTouchEvent(event);    }//  查询所有文件的递归方法    public void TraversalSearch(File file) throws IOException {        if(file.isDirectory()){            File [] filetwo=file.listFiles();            for (File file1 : filetwo) {                  TraversalSearch(file1);              }        }else{            String name=file.getName();            //图片格式            String regStr = "[Gg][Ii][Ff]|[Jj][Pp][Gg]|[Bb][Mm][Pp]|[Jj][Pp][Ee][Gg]";            //把正则 匹配的格式放入 类中            Pattern pattern = Pattern.compile(regStr);            //把需要匹配的,放入            Matcher matcher = pattern.matcher(name);            //匹配结果,符合为true 反之false            if(matcher.find()){                ImageView image=new ImageView(this);//通过绘图工厂,利用文件路径取到,文件 Bitmap bitmap= BitmapFactory.decodeFile(file.getAbsolutePath().trim());          //把图片文件设置入图片控件内                image.setImageBitmap(bitmap);                if(list.size()<20){                 //我只加入二十个图片,过多,内存溢出                    list.add(image);                }            }        }    }}

更多相关文章

  1. android 控件之checkbox自定义样式
  2. Android(安卓)自定义控件 GuideView 引导界面
  3. Android(安卓)ApiDemos示例解析(116):Views->Focus->2. Horizont
  4. android中Bitmap对象怎么保存为文件?
  5. Android(安卓)帧布局(FrameLayout)的理解
  6. Android(安卓)xml 文件代码自动提示
  7. Android(安卓)Studio 中build.gradle文件的详细解析
  8. Android(安卓)AIDL详解
  9. Android(安卓)Studio的.gitignore以及gitignore无效的解决

随机推荐

  1. 【android工程转为lib工程后提示'R.id.xx
  2. Android各个版本的名称和更新
  3. Android应用启动后自动创建桌面快捷方式
  4. android文本内容自动朗读实例教程
  5. Android验证码倒计时实现方式总结
  6. android应用安全——通信安全(android htt
  7. Android入门篇五:使用全局变量在Activity
  8. Android输入法原理和疑云
  9. Android(安卓)之 zygote 与进程创建
  10. 3.4 管理项目 - 创建Android库