欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android 手势 正则匹配图片实例代码

程序员文章站 2022-08-08 09:59:48
为没有手势的控件(viewflipper) 添加手势 xml

为没有手势的控件(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<imageview> 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);
        }
      }
    }
  }
}

以上所述是小编给大家介绍的android 手势 正则匹配图片实例代码,希望对大家有所帮助