ViewFlipper中放入两个ListView不能拖动的情况

Zotero内存占用与存储优化:从根源解决卡顿与空间不足 文献管理软件在学术工作中扮演着重要角色,其核心原理是通过数据库管理元数据与附件文件,实现文献的快速检索与组织。然而,随着文献库规模增长,软件的资源管理机制可能面临挑战,尤其是内存占用与存储空间优化问题。从技术价值看,高效的附件管理策略不仅能提升软件响应速度,还能确保数据安全与可移植性。在实际应用场景中,研究者常遇到软件卡顿、存储目录膨胀等痛点,这通常与附件存储模式、缓存机制及数据库维护有关。本文聚焦于Zotero这一主流工具,针对其内存占用高、文件无法删除等常见问题,提供了外置存储、链接附件、数据库维护等系 阅读详情

ViewFlipper可以帮助我们实现换屏的功能,如果我们在ViewFlipper中放入GridView或者ListView我们发现就无法实现了换屏操作,这个主要是因为GridView的onTouchEvent将事件全部拦截了,所以我们在ViewFlipper中无法监听到onTouchEvent,所以我们要根据用户的手势来判断是否要在ViewFlipper中去拦截onTouchEvent。拦截onTouchEvent的事件很简单就是在ViewFlipper的onInterrceptTouchEvent中返回true这样下面的事件都会经过ViewFlipper中onTouchEvent。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <com.xqq.view.MyViewFlipper 
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/fipper">
        <FrameLayout 
             android:layout_width="fill_parent"
             android:layout_height="fill_parent">
             <com.xqq.view.MyGridView 
                  android:layout_width="fill_parent"
                  android:layout_height="fill_parent"
                  android:background="#ff2341"
                  android:id="@+id/gv1"
                  ></com.xqq.view.MyGridView>
        </FrameLayout>
        <FrameLayout 
             android:layout_width="fill_parent"
             android:layout_height="fill_parent">
             <com.xqq.view.MyGridView 
                 android:layout_width="fill_parent"
                 android:layout_height="fill_parent"
                 android:background="#cf2342"
                 android:id="@+id/gv2"></com.xqq.view.MyGridView>
        </FrameLayout>
    </com.xqq.view.MyViewFlipper>
    

</LinearLayout>


MyViewFlipper.java

import com.xqq.DragActivity.GestureListenerAdapter;
import com.xqq.DragActivity.R;
import com.xqq.DragActivity.R.anim;

import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.widget.ViewFlipper;

public class MyViewFlipper extends ViewFlipper {
    
	private static final String TAG="MyViewFlipper";
	private static final float SCROLL_CRISIS=1f;  //滑动的临界正选值
	private static final int TOUCH_STATE_REST=0;  //滑动重置
	private static final int TOUCH_STATE_SCROLLING=1; //正在滑动中
	
	private int mLastX;        
	private int mLastY;
	private int mFirstX,mFirstY;
	private int mTouchState=TOUCH_STATE_REST;                      //滑动的状态
	private boolean mIsFirst=false;
	
	private GestureDetector mGestureDetector;

	
	public MyViewFlipper(Context context, AttributeSet attrs) {
		super(context, attrs);
		mGestureDetector=new GestureDetector(new MyGestureListener());
	}

	public MyViewFlipper(Context context) {
		super(context);
	}
	
	@Override
	public boolean onInterceptTouchEvent(MotionEvent ev) {
/*		if(ev.getAction()==MotionEvent.ACTION_MOVE && (mTouchState!=TOUCH_STATE_REST)){
			return true;
		}*/
		
		switch(ev.getAction()){
		case MotionEvent.ACTION_MOVE:
			Log.d(TAG, "xqq_move1");
			float distanceX=Math.abs((int)ev.getX()-mLastX);
			float distanceY=Math.abs((int)ev.getY()-mLastY);
			if(distanceY/distanceX<SCROLL_CRISIS){
				Log.d(TAG, "xqq_move2");
				mTouchState=TOUCH_STATE_SCROLLING;
			}
			break;
		case MotionEvent.ACTION_DOWN:
			mLastX=(int) ev.getX();
			mLastY=(int) ev.getY();
			mTouchState=TOUCH_STATE_REST;
			Log.d(TAG, "onInterceptTouchEvent_actiondown_x="+ev.getX());
			mFirstX=(int) ev.getX();
			mFirstY=(int) ev.getY();
			break;
		case MotionEvent.ACTION_UP:
			mTouchState=TOUCH_STATE_REST;
			break;
		}
		Log.d(TAG, "xqq_isTrue="+(mTouchState!=TOUCH_STATE_REST));
		return mTouchState!=TOUCH_STATE_REST;
	}
	
	
	private class MyGestureListener extends GestureListenerAdapter{
		@Override
		public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
				float velocityY) {
			
	    	if(e2.getX()>mFirstX){
	    		Log.d(TAG, "showPervious()");
	    		setInAnimation(getContext(),R.anim.slide_in_right);
	    		setOutAnimation(getContext(),R.anim.slide_out_left);
	    		showPrevious();
	    	}else if(mFirstX>e2.getX()){
	    		setInAnimation(getContext(),R.anim.slide_in_left);
	    		setOutAnimation(getContext(),R.anim.slide_out_right);
	    		Log.d(TAG, "showNext()");
	    		showNext();
	    	}
			return true;
		}
	}
	
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		switch(event.getAction()){
		case MotionEvent.ACTION_DOWN:
			Log.d(TAG, "xqq_ACTION_DOWN");
			break;
		case MotionEvent.ACTION_MOVE:
			Log.d(TAG, "onTouchEvent_move_e.x="+event.getX());
			break;
		}
        
		return mGestureDetector.onTouchEvent(event);
	}

}


FlipperActivity.java

import com.xqq.view.MyGridView;
import com.xqq.view.MyViewFlipper;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.GestureDetector;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.TextView;
import android.widget.ViewFlipper;

public class FlipperActivity extends Activity{
	private static final String TAG="FlipperActivity";
	private MyViewFlipper mViewFlipper;
	private String [] listStr1={"中国","日本","韩国","美国","加拿大"};
	private String [] listStr2={"北京","上海","江苏","浙江","山东"};
	private MyGridView mGridView1;
	private MyGridView mGridView2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    	super.onCreate(savedInstanceState);
    	setContentView(R.layout.layout_fillper);
    	mViewFlipper=(MyViewFlipper)findViewById(R.id.fipper);
    	mGridView1=(MyGridView) findViewById(R.id.gv1);
    	mGridView2=(MyGridView) findViewById(R.id.gv2);
    	MyAdapter adapter1=new MyAdapter(listStr1);
    	MyAdapter adapter2=new MyAdapter(listStr2);
    	mGridView1.setAdapter(adapter1);
    	mGridView2.setAdapter(adapter2);
    	
    }
    
    
    private class MyAdapter extends BaseAdapter{
        
    	class Holder{
    		TextView tvBookName;
    	}
    	
    	private String [] list;
    	
    	
		public MyAdapter(String[] list) {
			super();
			this.list = list;
		}

		@Override
		public int getCount() {
			return list.length;
		}

		@Override
		public Object getItem(int position) {
			return list[position];
		}

		@Override
		public long getItemId(int position) {
			return position;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			Holder holder=null;
			if(convertView==null){
				convertView=LayoutInflater.from(FlipperActivity.this).inflate(R.layout.gridview_item, null);
				holder=new Holder();
				holder.tvBookName=(TextView) convertView.findViewById(R.id.tv_bookName);
				convertView.setTag(holder);
			}else{
			    holder=(Holder) convertView.getTag();
			}
			holder.tvBookName.setText(list[position]);
			return convertView;
		}
    	
    }
    
}


 

易灵思Ti60F100 FPGA的HyperRAM实战:从硬件连接到Native接口时序调试 本文详细介绍了易灵思Ti60F100 FPGA内置HyperRAM控制器的实战应用。文章从硬件设计要点(如400MHz+信号完整性、等长匹配)切入,重点解析了如何通过Interface Designer配置高效的Native接口,并分享了其时序详解与调试技巧,为开发者提供了一份从硬件连接到软件调试的深度指南。 阅读详情

相关推荐

炸金花游戏(3)--基于EV(期望收益)的简单AI模型

前言:   炸金花这款游戏, 从技术的角度来说, 比德州差了很多. 所以他的AI模型也相对简单一些. 本文从EV(期望收益)的角度, 来尝试构建一个简单的炸金花AI. 相关文章:  德州扑克AI--Programming Poker AI(译).  系列文章说来惭愧, 之前一直叫嚷着写德州AI, 不过可惜懒癌晚期, 一直没去实践, T_T. 相比而言,***简单很多, 也更偏重于运...

weixin_30377461的博客 2340

android viewflipper图片轮播,Android使用ViewFlipper实现图片上下自动轮播

先看效果:QQ图片20210511231831.gif1.xml代码:android:id="@+id/viewFlipper"android:layout_width="match_parent"android:layout_height="match_parent"android:flipInterval="3000"android:inAnimation="@anim/anim_marque...

weixin_35788791的博客 333

STM32-DAC定时器触发三角波生成【频率与幅度精准控制】

本文详细介绍了STM32 DAC定时器触发三角波生成的原理与实现方法,涵盖硬件配置、频率与幅度精准控制技巧及代码实现。通过定时器触发DAC模块,可灵活调节三角波的频率和幅度,适用于信号发生器等高精度应用场景。

weixin_29161785的博客 452

android viewflipper 动态加载,Android开发之ViewFlipper自动播放图片功能实现方法示例...

本文实例讲述了Android开发之ViewFlipper自动播放图片功能实现方法。分享给大家供大家参考,具体如下:简介:1.ViewFlipper继承了ViewAnimator 可以调用addView()添加组件2.ViewAnimator与AdapterViewFlipper类似,区别在于 : AdapterViewFlipper可以通过Adapter直接添加多个view,而ViewAnimat...

weixin_39578674的博客 267

408计算机复试专业课问答汇总

408计算机复试专业课问答汇总

weixin_45930223的博客 3698

判断两个多边形是否相交(java实现)

判断两个多边形是否相交 ,当前认为一个点相交也是相交,可针对凹多边形和凸边型等多复杂的多边形进行相交判断,采用java实现,因为网上java实现的比较少,所以这里写下如何实现,适用于碰撞检测,地图等等应用场景

IT_CREATE的博客 5843

Android中ViewFlipper详解

前面已经讲过ImageSwitcher和TextSwitcher。ImageSwitcher用来切换ImageView的,TextSwitcher是用来切换TextView的。 但是我们现在要切换自定义View怎么办? ImageSwitcher和TextSwitcher已经不能满足我们的需求。ViewFlipper可以在任意View之间切换。下面我们就来讲解它。 先看一下结构图 可以...

mmdev 394

使用 Python 构建 Reddit 热帖爬虫:抓取热门讨论帖和评论

在现代互联网中,Reddit 被誉为全球最大、最活跃的讨论平台之一,汇聚了各种主题的帖子、评论和社交互动。因此,抓取 Reddit 上的热门帖子和评论可以为我们提供一个丰富的文本数据源,可以用于情感分析、话题建模、趋势分析等应用。Reddit 提供了官方的 API,可以让开发者获取包括帖子、评论、用户信息等在内的各种数据。我们可以结合上述方法,抓取多个热门帖子,并将每个帖子的标题、作者、发布时间和评论内容保存到一个数据结构中。每个帖子的对象包含了丰富的信息,如标题、内容、发布时间、作者等。

2201_76125261的博客 381

Android 组件之ViewFlipper

ViewFlipper和ViewPager 的区别及作用ViewFlipper和ViewPager 都是一个切换控件,一般用来切换图片资源,用于轮播以及binder展示,ViewPager大家都很熟悉 ,可以展示本地图片也可展示网络图片,说所以说很牛逼,这个ViewFlipper相比较ViewPager 同样可以完成,并且也能添加动画,最主要的是使用相当简单,就比如说是轮播一句代码就搞定,(以下所有

图你怀中安稳的博客 514

AUTOSAR AP——SM模块

对AUTOSAR AP中状态管理模块SM,从模块定义、总结等多方面进行了介绍。

weixin_43627682的博客 284

Python 爬虫实战:从零搭建第一个爬虫程序(附完整代码)

本文介绍了Python网络爬虫的入门实战,以豆瓣Top250电影榜单为例,详细讲解爬虫开发全流程。内容包括爬虫基础原理、环境搭建、请求发送与响应处理、数据解析与保存等核心环节,并提供了可直接运行的完整代码示例。文章还分析了常见问题解决方案,并强调了爬虫开发的合规注意事项。通过本教程,读者可快速掌握Python爬虫的基本思路和实操技巧,为后续深入学习BeautifulSoup、XPath等进阶技术打下基础。

2503_91057718的博客 2316

android ui开发高级,Android开发笔记(四)高级UI组件

ProgressBarstyle="" 改进度条样式,前面无android:android:max="100" 最大进度android:progress="40" 当前进度public class MainActivity extends AppCompatActivity {private ProgressBar pb;private int p = 0;private Handler mHan...

weixin_39788572的博客 207

BACnet协议栈基本对象BI、BO、AI、AO、AV以及device和File对象介绍

BACnet协议栈基本对象BI、BO、AI、AO、AV以及device和File对象介绍

shufawangzhang的博客 3986

ListView,GridVIew.去掉右侧滚动条

直接在布局文件中增加属性增加:android:scrollbars="none" android:fadeScrollbars="false"setVerticalScrollBarEnabled(boolean b); 设置true时: 存在滚动条 设置false时: 隐藏滚动条setScrollbarFadingEnabled(boolean b); 设置true时: 活动时显示滚动条,不活动...

lnny的博客 2147

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

IDEA的使用指南

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

Android 之ViewFlipper(页面轮播控件)

whatViewFlipper,它是Android自带的一个多页面管理控件,可以实现引导页图片切换以及广告 轮播的效果。

二锅头爱拉菲 527

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

VC中sqlite的使用

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

Android recyclerView 实现复杂的item布局(如淘宝、京东、商城类首页)

现在各种电商如火如荼,首页页面设计也颇有色彩。之前项目也是一个电商类购物app,主页设计了好几套样式 其中一个样式如下图相似涉及到: 轮播广告图banner、viewPager的轮播、沉浸式、item的复杂分割线、以及自定义的 主页头条ViewFlipper使用、glide图片加载、其他的琐碎知识点也略有涉及到。 先看下Gif效果图: 再下引用的第三方控件: //banne...

吕氏春秋i 1万+

使用ViewFlipper实现图片自动切换,并支持手势滑动切换

首先来看看项目结构目录: 不好意思,我右开始使用AndroidStudio了 ,开始用不习惯,就特意去搭建了eclipse的开发环境,整了好久,后来发现eclipse还是不如AndroidStudio啊,虽然快捷键那些东西啊用不太习惯,但是相信慢慢都会好的。 首先我们直接看代码吧: 先是activity_main.xml <LinearLayout xmlns

夏天龙的博客 1460

ViewFlipper使用详解

一.概述ViewFlipper是一个切换控件,一般用于图片的切换,当然它是可以添加View的,而不限定只用于ImageView,当然我们也可以自定义View,只是我们经常利用ViewFlipper来实现的是ImageView的切换,如果切换自定义的View,倒还不如使用ViewPager来做。二.基本实现先看一下效果图: 1.xml布局<RelativeLayout xmlns:android

Small_Lee的博客 1319

Android-ViewFlipper的滑动与子视图中item点击的冲突解决

场景:ViewFlipper中添加了几个View,每个View中有几条itemView,每个itemView设置了setOnClickListener,ViewFlipper中通过GestureDetector来控制左右翻页效果。 问题:不滑动,点击每个itemView,运行正常,当触发了滑动后,手势抬起时,依然会执行itemView的click事件 解决:在继承的ViewFlipper中,拦

bdmh的专栏 5808

Android实战 - 音心音乐播发器 (主界面实现)

开发平台 : eclipse , ubuntu ,android  sdk 4.0+ 1.背景    主页的设计从上往下依次是滚动广告(ViewFlipper ),分类信息( GridView ),热门榜单( ListView ),整个界面可以滑动,通过ScrollView 包裹,使得整个页面可滑动。    界面展示 :                                   

原小明 2304

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

安卓中Viewpager 的兄弟控件“ViewFlipper” 使用

相信大家都很熟悉ViewPager的数据 今天我们来讲一讲他的兄弟控件ViewFlipper 这个现在很多软件上都有的使用的控件比如京东的APP 首先看一下官网的介绍   Simple ViewAnimator that will animate between two or more views that have been added to it. Only one child is ...

Rose_gz的博客 547

ViewFlipper 控制第一页和最后一页

<LinearLayout xmlns:Android="http://schemas.android.com/apk/res/android" Android:orientation="vertical" Android:layout_width="fill_parent" Android:layout_height="fill_parent"> <ViewFlipper Android:

lostinai的专栏 1295

Android开发之ViewFlipper

Android开发之ViewFlipper /* * Android开发之ViewFlipper * 北京Android俱乐部群:167839253 *Created on: 2012-7-25 *Author: blueeagle * Email:liujiaxiang@gmail.com */ 概述 我们经常在应用中会遇见一种情况:用大拇指左右拨动屏幕,然后屏幕上的内...

天下无双 332

Android ViewFlipper/ViewSwitcher/ViewPager/VerticalViewPager/ViewFlow/StackView/AdapterViewFli用法案例实现

讲述ViewFlipper,ViewSwitcher,ViewPager,VerticalViewPager,ViewFlow的用法,主要作用于界面滑动。 一 Demo目录结构 src └── src/com     └── src/com/android         └── src/com/android/viewflipperdemo             ├──

好久不见 2310
上一篇: 设置Activity进入退出动画
下一篇: 设计模式的皇后-观察者模式
startFromWeb
博客等级 码龄16年 23粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值