20.ViewFilpper+手势实现ViewPager功能+添加动画

24.Android-实现黑名单电话拦截 一.知识概括 二.具体代码实现 1.建aidl包 2.拷贝以下文件到项目的aidl包中 下载地址: NeighboringCellInfo.aidl和ITelephony.aidl 3.在清单文件AndroidManifest.xml中添加权限 <manifest xmlns:android="http://schemas.android.com 阅读详情

一:知识概要

二:案例

1.效果图


2.代码树状图


3.案例中使用的图片


4.具体实现代码

a.布局activity_main.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.zking.android20_gesture.MainActivity">

    <ViewFlipper
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/vf_main_image"
        >
    </ViewFlipper>

</LinearLayout>

b.Java代码MainActivity.java

package com.zking.android20_gesture;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.widget.ImageView;
import android.widget.Toast;
import android.widget.ViewFlipper;

public class MainActivity extends AppCompatActivity {

    private ViewFlipper vf_main_image;
    private int images[]={R.drawable.s1,R.drawable.s2,R.drawable.s3};//图片数组
    private GestureDetector gd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            vf_main_image = (ViewFlipper) findViewById(R.id.vf_main_image);

            for (int i = 0; i < images.length; i++) {
                ImageView iv=new ImageView(this);
                iv.setImageResource(images[i]);//给每一个控件设置一个图片
                vf_main_image.addView(iv);
            }

            //实例化手势检测器类(手势的监听)
            gd = new GestureDetector(this, new GestureDetector.OnGestureListener() {
                    //按下
                    @Override
                    public boolean onDown(MotionEvent e) {
                        Log.i("test","按下onDown");
                        return false;
                    }

                    //按下,但是还未抬起
                    @Override
                    public void onShowPress(MotionEvent e) {
                        Log.i("test","按下去,还没松开之前会调onShowPress");
                    }

                    //轻按,按一下,立刻抬起
                    @Override
                    public boolean onSingleTapUp(MotionEvent e) {
                        Log.i("test","轻按/按一下就抬起会调onSingleTapUp");
                        return false;
                    }

                    //滚动
                    @Override
                    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
                        Log.i("test","滚动onScroll");
                        return false;
                    }

                    //长按
                    @Override
                    public void onLongPress(MotionEvent e) {
                        Log.i("test","长按onLongPress");
                    }

                    //拖动
                    @Override
                    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
                        Log.i("test","滚完之后,最后调拖动onFling");
                        //右滑:左边e1代表起点,右边代表终点e2 (x轴坐标)
                        //判断
                        if(e2.getX()-e1.getX()>200){//起点与终点的距离>200
                            Toast.makeText(MainActivity.this, "右滑,上一张", Toast.LENGTH_SHORT).show();
                            vf_main_image.showPrevious();//实现上一张功能
                            //动画效果
                            //左进右出
                            vf_main_image.setInAnimation(MainActivity.this,R.anim.left_in);
                            vf_main_image.setOutAnimation(MainActivity.this,R.anim.right_out);
                        }
                        //左滑
                        if(e1.getX()-e2.getX()>200){//不能else
                            Toast.makeText(MainActivity.this, "左滑,下一张", Toast.LENGTH_SHORT).show();
                            vf_main_image.showNext();//实现下一张功能
                            //左出右进
                            vf_main_image.setInAnimation(MainActivity.this,R.anim.right_in);
                            vf_main_image.setOutAnimation(MainActivity.this,R.anim.left_out);
                        }
                        return false;
                    }
            });
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        Log.i("test","触摸onTouchEvent");
        return gd.onTouchEvent(event);
    }




}

c.动画

left_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true"
    android:duration="1000"
    >

    <!--左进-->

     <translate
         android:fromXDelta="-100%p"
         android:toXDelta="0"
         ></translate>

    <rotate
        android:fromDegrees="0"
        android:toDegrees="360"
        android:pivotX="50%"
        android:pivotY="50%"
        ></rotate>

</set>
left_out.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true"
    android:duration="1000"
    >
    <!--左出-->

    <!--移到屏幕外面去-->
     <translate
         android:fromXDelta="0"
         android:toXDelta="-100%p"
         >
     </translate>
    <!--旋转:从0度旋出去-->
    <rotate
        android:fromDegrees="0"
        android:toDegrees="-360"
        android:pivotX="50%"
        android:pivotY="50%"
        >
    </rotate>

</set>
right_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true"
    android:duration="1000"
    >

    <!--右进-->

     <translate
         android:fromXDelta="100%p"
         android:toXDelta="0"
         ></translate>

    <rotate
        android:fromDegrees="0"
        android:toDegrees="-360"
        android:pivotX="50%"
        android:pivotY="50%"
        ></rotate>

</set>
right_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true"
    android:duration="1000"
    >

    <!--右出-->
     <translate
         android:fromXDelta="0"
         android:toXDelta="100%p"
         ></translate>

    <rotate
        android:fromDegrees="0"
        android:toDegrees="360"
        android:pivotX="50%"
        android:pivotY="50%"
        ></rotate>

</set>

5.查看执行效果






28.Android-多媒体(视频播放器-拍照-录像) 一.知识概要 1.拍照实现步骤:     界面使用SurfaceView控件,显示照相机的画面     SurfaceView接受摄像头界面变化的信息         surfaceView.getHolder().addCallback()     重写三个方法         surfaceDestroyed--->当预览界面关闭时,触发             一般在这里执行销 阅读详情

相关推荐

19.实现多点触摸画圆(拖动+检测手机多点触摸的点数+随机颜色)

效果图如下: 思路: 自定义(控件)UI+多点触摸--->实现检测手机支持的触摸的点数 触摸哪里哪里画一个圆(自己定义一个控件,1.给控件设触摸事件,2.触摸完之后画圆) 多个手指头画圆,即多点触摸事件 哪里抬起,哪里圆就消失 具体实现代码: Circle.java package com.zking.android19_pointstouch;

_北冥有鱼_的博客 652

ViewFlipper实现手势滑动

利用ViewFlipper可以实现图片的轮播,支持手势滑动的图片切换   在ViewFlipper中加入图片   1、静态导入     2、动态导入:addView()方法   ViewFlipper常用方法: 学习视频:http://www.imooc.com/video/2657

u013599426的专栏 1793

近几年预训练语音大模型汇总

语音大模型研究近年来取得显著进展,主要包括wav2vec 2.0(2020)、HuBERT(2021)、WavLM(2022)、Data2Vec(2022)、Whisper(2023)等代表性工作。这些模型采用自监督学习框架,通过掩码预测、对比学习等策略在大规模语音数据上预训练,可有效应用于语音识别、情感分析、疾病检测等下游任务。其中wav2vec 2.0首次将对比学习引入语音领域,Whisper通过68万小时弱监督数据实现强大的跨语言能力。这些突破为低资源语音任务提供了通用特征提取方案,推动了医疗语音分析

victory0431的博客 1778

关于ViewPager、ViewFilpper、ViewFlow,Gallery四种实现水平滑动方式的比较

ViewPager ViewPager类提供了多界面切换的新效果。新效果有如下特征: [1] 当前显示一组界面中的其中一个界面。 [2] 当用户通过左右滑动界面时,当前的屏幕显示当前界面和下一个界面的一部分。 [3] 滑动结束后,界面自动跳转到当前选择的界面中   ViewPager来源于google 的补充组件android-support-v4.jar,位置在androidSDK文

人生起落,生活苦甜,坚持追求! 2023

SpringBoot项目整合Knife4j接口文档

写满接口信息的文档,每条接口包括:请求参数,响应参数,接口地址,接口名称,请求类型,请求格式,备注。

诨号无敌鸭的博客 1017

(王道考研计算机网络)第三章数据链路层-第一节:数据链路层功能概述

文章目录一:本章概述二:数据链路层基本概念三:数据链路层功能概述(1)为网络层提供服务(2)链路管理(3)组帧(4)流量控制(5)差错控制 本章是计算机网络中入门较难的一章,如果没有接触过相关内容,可能会止步于一些晦涩难懂的术语。本节内容希望大家可以用心看一看,对于大家入门是很有帮助的 一:本章概述 数据链路层位于物理层之上,主要作用就是提高物理层传输比特流的能力,使物理层可能出现差错的连接转变为逻辑上无差错的数据链路,同时向网络层提供服务。本章学习的主要就是数据链路层的功能和应用 数据链路层功能 封

快乐江湖的博客 2469

Android开发笔记(二十一)横幅轮播页Banner

如今我们打开电商类的APP,首页上方就有很炫的Banner(横幅轮播页),里面放了最新的商品和活动的介绍图片,还能自动轮播,也可左右翻动,着实是吸引眼球。 下面是一个Banner的截图,我们看看这个Banner是如何实现的。 首先看到Banner的界面由两部分组成,一部分是轮播的图片,另一部分是图片下方的几个图标用来表示当前播放的是第几张图片。所以一个Banner需要先初始化两个队列,

aqi00的博客 6278

【BlueDroid】【PBAP】蓝牙电话本协议之同步通讯录分析(超详细)

Header - Type = "x-bt/vcard-listing":代表了该Request对应的Function为PullvCardListing;Profile:PBAP (4),上层应用层协议为PBAP,OBEX协议的上层应用层协议除了PBAP,还有OPP、MAP协议;Response in Frame:该request frame-485对应的Response frame为489;在PBAP协议同步通讯录和通讯记录中,都是基于OBEX协议实现的,PBAP协议作为了应用层协议;

风云说通信 2070

ViewFilpper的使用

ViewFlipper使用,android

breeze048的博客 459

如何使用 Python 爬取 58 同城招聘信息

职位名称:招聘的岗位名称,如“前端开发”、“数据分析师”等。公司名称:招聘公司的名称。薪资待遇:职位的薪资范围,通常以“面议”、“10k-20k”这样的形式表示。工作地点:公司所在的城市及具体地址。公司福利:例如五险一金、带薪年假、绩效奖金等。发布时间:职位信息的发布时间。一个典型的招聘页面 URL 格式通常如下:在这个页面上,职位信息会分页展示,爬虫需要模拟翻页,获取多个页面的招聘信息。

2201_76125261的博客 1291

PCB高速信号换层孔新技术:VECS(Vertical Conductive Structure Technology)解析

摘要:垂直导电结构(VeCS)是一种新型PCB互连技术,由平板信号走线和椭圆形接地层构成半同轴结构,相比传统过孔具有显著优势。通过全波仿真和实测验证,VeCS展现出更好的阻抗连续性、更低的插入损耗和回波损耗,以及优异的串扰抑制能力。其椭圆形接地结构能有效隔离电磁干扰,在相同布线密度下远端串扰比传统过孔降低约50%。VeCS制备工艺与传统PCB工艺兼容,无需新增设备,且能实现更高密度互连。测试结果显示,2.5英寸带状线通道中VeCS结构的信号完整性表现明显优于传统过孔,为高速数字系统提供了更可靠的垂直互连解决

小孟同学的博客 199

android - 滑动效果之ViewFlipper与ViewPager与Gallery

android - 滑动效果之ViewFlipper与ViewPager与Gallery 1、ViewFlipper 1)View切换的控件—ViewFlipper介绍 ViewFilpper类继承于ViewAnimator类。而ViewAnimator类继承于FrameLayout。 查看ViewAnimator类的源码可以看出此类的作用主要是为其中的View切换提供动画

zhang31jian的专栏 4694

天地图下载带审图号(审图号: GS(2024)0650号)的 “行政区划” 数据(含shp文件下载地址)

在科研投稿论文过程中,多数期刊杂志要求我们制作涉及国界的图件,必须使用自然资源部地图技术审查中心发布的标准地图底图。如地理学报、地理科学等期刊的投稿指南中写到:非标准底图本刊不予发表!(如图1.1所示)如果一定要用,凡涉国界图件(国内部分地区、全国、世界部分地区、全球)必须使用自然资源部标准地图服务系统标准地图底图(http://bzdt.ch.mnr.gov.cn/)(如图1.1所示)或国家测绘局地理信息局标准地图底图(如图1.2所示),所用底图边界要完全无修改(包括南海诸岛位置)。

JData_Engineer的博客 2302

ViewFlipper实现ViewPager的页面切换效果

activity_main.xml &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" androi...

weixin_34176694的博客 119

STM32G0/G4电机控制中三角函数与浮点运算优化实战

三角函数(sin/cos)和浮点运算是电机矢量控制(FOC)的核心基础,直接影响Clark/Park变换、SVPWM及观测器的实时性与精度。在资源受限的MCU上,标准math.h库因无硬件FPU支持而引发严重时序抖动,导致电流环延迟、转矩脉动增大甚至系统复位。通过硬件加速(如STM32G4的CORDIC协处理器)或定制化定点算法(如STM32G0的查表+线性插值),可将sin/cos计算从数十微秒压缩至1–3 μs量级,提升30倍以上效率。该方案广泛适用于BLDC/PMSM驱动、伺服控制及高动态响应嵌入式运

weixin_35751412的博客 108

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

ViewFlipper和ViewPager

1、ViewFlipper 1)View切换的控件—ViewFlipper介绍 ViewFilpper类继承于ViewAnimator类。而ViewAnimator类继承于FrameLayout。 查看ViewAnimator类的源码可以看出此类的作用主要是为其中的View切换提供动画效果。该类有如下几个和动画相关的方法。 setInAnimation:设置View进入屏幕

linghu_java的专栏 2万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

viewpager和viewFlipper

1、ViewFlipper 1)View切换的控件—ViewFlipper介绍 ViewFilpper类继承于ViewAnimator类。而ViewAnimator类继承于FrameLayout。 查看ViewAnimator类的源码可以看出此类的作用主要是为其中的View切换提供动画效果。该类有如下几个和动画相关的方法。 setInAnimation:设置View进入屏幕

wj2030的专栏 633

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

ViewFlipper、ViewPager和Gallery

1、ViewFlipper 1)View切换的控件—ViewFlipper介绍 ViewFilpper类继承于ViewAnimator类。而ViewAnimator类继承于FrameLayout。 查看ViewAnimator类的源码可以看出此类的作用主要是为其中的View切换提供动画效果。该类有如下几个和动画相关的方法。 setInAnimation:设置View进入屏幕时候使用的动...

weixin_30394333的博客 101

安卓之ViewFlipper实现渐变视差导航页

前言以前的导航页总是使用viewPager配套fragment来实现的,某天一个妹子说其实导航页也可以使用ViewFilpper 来实现,哈哈确实不错,前段时间就用ViewFilpper 实现了京东快报,然后呢那时候对ViewFilpper 也随便了解了下,不过那个直接是xml实现的,这里不表了,接着看今天实现的渐变视差导航页。ViewFilpperViewFilpper 是Android官方提供的

Losileeya 3889

android ViewPager,ViewFlipper,ViewFlow实现左右滑动

开篇 首页只是作为ViewPager,ViewFlipper,ViewFlow的入口,提供三个Button进行跳转。 1. ViewPager 先看看官方文档怎么介绍ViewPager的:http://developer.android.com/reference/android/support/v4/view/ViewPager.html 继承关系如下: java.la...

he91-com 194

Android实现文字逐字显示出来效果

效果图如下: 可以采用自定义TextView的方式去实现,也可才用定时更新文字显示,思路是让TextView每隔一秒显示以一个字符串(并非每一秒多出来一个汉字),那么就简单了,可以开启一个线程,实现代码如下: 1.布局文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

_北冥有鱼_的博客 6798

29.Android-闹钟-通知(定时操作)

一.知识概要 二.具体代码实现如下: 布局文件 activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xm

_北冥有鱼_的博客 1040

23.本地服务Services

一、服务简介         执行耗时操作(后台) 二.如何创建本地服务知识概括 三.案例 1.具体实现代码 activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://sch

_北冥有鱼_的博客 822

32.Android端向web端(服务器)提交数据(GET-POST-AsyncHttpClient)

一.使用Eclipse的web服务端(先写web服务端Android端才能调) login.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 登录 登录页面 用户名: 密码: LoginServlet

_北冥有鱼_的博客 804

13.退出应用程序(递归和栈退出)

一.递归退出 递归执行方式:A调B,B跳C,C跳D。 当在D里面退出,就D跳C,C跳B,B跳A,然后就退出了(一个一个退)效果图:实现代码如下:activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http

_北冥有鱼_的博客 746

7.高级控件(一)之AutoCompleteTextView和MultiCompleteTextView及Spinner-ListView

1.AutoCompleteText自动完成文本框(自动补全)   首先让我们来看一下我们要完成的效果图(右) 具体代码实现 布局文件activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://sch

_北冥有鱼_的博客 681
上一篇: Android实现文字逐字显示出来效果
下一篇: 21.Android系统广播大全
_北冥有鱼_
博客等级 码龄10年 41粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值