摘要:如果看了下面的文章有部分你觉得熟悉,那不用想了,我是截取过来的^0^,然后补上一些细节问题,理解更方便。(说明:下面是抄袭网上两遍文章组合成的,自己只是加了点点改动)概念介绍1、onInterceptTouchEvent()是用于处理事件(重点onInterceptTouchEvent这个事件是从父控件开始往子控件传的,直到有拦截或者到没有这个事件的view,然后就往回从子到父控件,这次是onTouch的) (类似于预处理,当然也可以不处理)并改变事件的传递方向,也就是决定是否允许Touch事件继续向下(子控件)传递,一但返回True(代表事件在当前 的viewGroup中会被处理),则向下传
阅读全文
摘要:在 Java 程序中使用多线程要比在 C 或 C++ 中容易得多,这是因为 Java 编程语言提供了语言级的支持。本文通过简单的编程示例来说明 Java 程序中的多线程是多么直观。读完本文以后,用户应该能够编写简单的多线程程序。为什么会排队等待?下面的这个简单的 Java 程序完成四项不相关的任务。这样的程序有单个控制线程,控制在这四个任务之间线性地移动。此外,因为所需的资源 — 打印机、磁盘、数据库和显示屏 -- 由于硬件和软件的限制都有内在的潜伏时间,所以每项任务都包含明显的等待时间。因此,程序在访问数据库之前必须等待打印机完成打印文件的任务,等等。如果您正在等待程序的完成,则这是对计算资
阅读全文
摘要:一般大家都知道ArrayList和LinkedList的大致区别:1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。ArrayList和LinkedList是两个集合类,用于存储一系列的对象引用(references)。例如我们可以用ArrayList来存储一系列的String或者Integer。那么ArrayList和Lin..
阅读全文
摘要:Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。 一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。 二、然而,当一个线程访问object的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该object中的非synchronized(this)同步代码块。 三、尤其关键的是,当一个线程访问object的一个synchronized(this)同步代码块时,
阅读全文
摘要:线程状态1.程序通过Thread t = new Thread(),调用t.start()启动一个线程,使该线程进入可运行(Runnable)的状态。2.由JVM的决定去调度(Scheduler) 在可运行状态(Runnable)下的线程,使该线程处于运行 (Running) 状态,由于JVM的调度会出现不可控性,即不是优先级高的先被调用,可能先调用,也可能后调用的的情况。运行状态(Running)下,调用礼让yield()方法,可以使线程回到可运行状态(Runnable)下,再次JVM的调度(并不依赖优先级)。3.线程在Running的过程中可能会遇到 ①睡眠(sleeping)、②等待(w
阅读全文
摘要:http://sunjun041640.blog.163.com/blog/static/25626832201041411210560/Java监视器支持两种线程:互斥和 协作。前面我们介绍了采用对象锁和重入锁来实现的互斥。这一篇中,我们来看一看线程的协作。举个例子:有一家汉堡店举办吃汉堡比赛,决赛时有3个顾客来吃,3个厨师来做,一个服务员负责协调汉堡的数量。为了避免浪费,制作好的汉堡被放进一 个能装有10个汉堡的长条状容器中,按照先进先出的原则取汉堡。如果容器被装满,则厨师停止做汉堡,如果顾客发现容器内的汉堡吃完了,就可以拍响容器上的 闹铃,提醒厨师再做几个汉堡出来。此时服务员过来安抚..
阅读全文
摘要:1.基本的的使用可以很容易百度到,但是当你使用了android-support-v4或者android-support-v7或者android-support-v11包之后,你发现导出的时候,警告相当得多,这个时候,就算百度,Google都不太好使了,因为他们都是回答了一部分,没有很好的解决你的问题:其实要解决你的问题的方法就在你的android-sdk路径的proguard中的文档中:特别是Examples示例中:示例中有专门针对android的说明: 以下是第一点:If you're using additional Google APIs, you'll have to
阅读全文
摘要:publicclassMain{publicstaticvoidmain(String[]args)throwsException{RunnermRunner=newRunner();//AllocatesanewThreadobject.//mRunner-theobjectwhoserunmethodiscalled.//start()-causesthisthreadtobeginexecution;theJavaVirtualMachinecallstherunmethodofthisthread.newThread(mRunner).start();for(inti=0;i<1
阅读全文
摘要:我使用viewpager做了一个滑动的切换效果,效果还挺不错,具体实现效果网上很多,各位可以去找,不过在实现切换效果之后,因为需求需要,我需要获取当先显示的那个view,这就很让人恶心了。viewpager有setOnPageChangeListener,里面有@Overridepublic voidonPageSelected(int arg0) {}@Overridepublic voidonPageScrolled(int arg0, float arg1, int arg2) {}@Overridepublic voidonPageScrollStateChanged(int arg0
阅读全文
摘要:<LinearLayout android:id="@+id/viewGroup" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_marginBottom="30dp" android:gravity="center_horizontal" android:orie
阅读全文
摘要:有两处关键代码,第一处,生成用于PagerAdapter的View列表:[html] view plaincopyprivateList<View>initViews(){List<View>listViews=newArrayList<View>();MyViewv1=newMyView(this,R.layout.view1);MyViewv2=newMyView(this,R.layout.view2);MyViewv3=newMyView(this,R.layout.view3);//循环滑动:头部添加一个和原尾部相同的view,尾部添加一个和原头部
阅读全文
摘要:Android里有两个类android.view.GestureDetectorandroid.view.GestureDetector.SimpleOnGestureListener1) 新建一个类继承SimpleOnGestureListener,HahaGestureDetectorListener,可以实现以下event事件。booleanonDoubleTap(MotionEvente)解释:双击的第二下Touch down时触发booleanonDoubleTapEvent(MotionEvente)解释:双击的第二下Touchdown和up都会触发,可用e.getAction()
阅读全文
摘要:在Android平台上,捕获用户在界面上的触发事件有很多种方法,View类就提供这些方法。你在使用各种View视图来布局界面时,会发现几个公用的回调方法来捕捉有用的UI触发事件,当事件在某个View对象上被触发时,这些方法会被系统框架通过这个对象所调用,例如:当一个View(如一个Button)被点击,onTouchEvent()方法会在该对象上被调用,所以,为了捕获和处理事件,必须去继承某个类,并重载这些方法,以便自己定义具体的处理逻辑,显然,你更容易明白,为什么在你使用View类时会嵌套带有这些回调方法的接口类,这些接口称为event listeners,它是你去获取UI交互事件的工具在你
阅读全文
摘要:Android View和ViewGroup从组成架构上看,似乎ViewGroup在View之上,View需要继承ViewGroup,但实际上不是这样的。 View是基类,ViewGroup是它的子类。这就证明了一点,View代表了用户界面组件的一块可绘制的空间块。每一个View在屏幕上占据一个长方 形区域。在这个区域内,这个VIEW对象负责图形绘制和事件处理。View是小控件widgets和ViewGroup的父类。ViewGroup又是 Layout的基类。 从上面两图的对比中,可以看出,实际上ViewGroup是View的子类,因此,View的行为特征ViewGroup也具备,但同时因.
阅读全文
摘要:importandroid.app.Activity;importandroid.os.Bundle;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.view.WindowManager;importandroid.widget.Button;publicclassFullScreenTestActivityextendsActivity{privateButtonbutton;privatebooleanisFulllScreen;/**Calledwhentheactivityisf
阅读全文
摘要:关于动画的实现,Android提供了Animation,在Android SDK介绍了2种Animation模式:1. Tween Animation:通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果,即是一种渐变动画;2. Frame Animation:顺序播放事先做好的图像,是一种画面转换动画。动画类型下面先来看看Android提供的动画类型。Android的animation由四种类型组成在XML文件中:alpha 渐变透明度动画效果scale 渐变尺寸伸缩动画效果translate 画面转换位置移动动画效果rotate 画面转移旋转动画效果在Java 源码中定义了相应
阅读全文
摘要:在Android SDK Tools和Eclipse ADT 插件的第17版本 (revision 17)中,我们对Android项目的依赖关系管理做了很多改变。我们所做的第一个改变是调整基于 Ant 的编译系统和 Eclipse ADT 插件,使他们具有相同的行为。Android 项目包含源代码文件夹,以及对库项目 (android library projects) 和 jar 文件的依赖。 不需要其他多余的设置,只需要在project.properties中添加对于库项目的依赖,Android项目就会在动在 classpath 中添加以下依赖项:libs/*.jar 的内容库项目(lib
阅读全文
摘要:使用PopupWindow来做自定义menu,往PopupWindow增加一个子View,子View的布局就是menu的布局。出现和退出的动画:可以给PopUpWindow或它的子view添加。网上所有用PopupWindow做的menu有个共同特点:就是点击menu键出现PopupWindow,然后再点击menu键无法使PopupWindow退出/dismiss()。当给PopupWindow设置了setFocusable(true),menu显示后,点击menu其他任何地方,menu都会消失,但是这时候按钮的点击事件其实是不响应的。同时只响应键盘的返回键,其他按键均不响应,比如点击menu
阅读全文
摘要:PopupWindow 跟我们的 Activity 不一样,因为我们在构造 PW 的时候往往不是继承来的,而是 new 出来的。所以不能使用重写 PW 的 onKeyDown() 之类的方法来截获键盘事件。好在 PW 本身的特性让我们很容易就能做到用返回键来退出,当然我们也可以截获键盘事件,这样就有两种方法了。方法一: 最简单的方法——
在 new 的时候,使用下面的方法:popupWindow = new PopupWindow(popupWindow_view, 200, 150, true);关键在于最后一个参数,SDK 给出的提示是 Focusable,顾名思义就是该 PW 的 Foc
阅读全文
摘要:1.获取状态栏高度: decorView是window中的最顶层view,可以从window中获取到decorView,然后decorView有个getWindowVisibleDisplayFrame方法可以获取到程序显示的区域,包括标题栏,但不包括状态栏。于是,我们就可以算出状态栏的高度了。Java代码 Rectframe=newRect();getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);intstatusBarHeight=frame.top;Java代码 Rectframe=newRect();getWin
阅读全文
摘要:这篇文章将向你阐述<merge />标签的使用。 <merge />标签用于减少View树的层次来优化Android的布局。通过看一个例子,你就能很容易的理解这个标签能解决的问题。下面的XML布局显示一个图片,并且有一个标题位于其上方。这个结构相当的简单;FrameLayout里放置了一个ImageView,其上放置了一个TextView:<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_
阅读全文
摘要:QVGA = 320 * 240;WQVGA = 320 * 480;WQVGA2 = 400 * 240;WQVGA3 = 432 * 240;HVGA = 480 * 320;VGA = 640 * 480;WVGA = 800 * 480;WVGA2 = 768 * 480;FWVGA = 854 * 480;DVGA = 960 * 640;PAL = 576 * 520;NTSC = 486 * 440;SVGA = 800 * 600;WSVGA = 1024 * 576;XGA = 1024 * 768;XGAPLUS = 1152 * 864;HD720 = 1280 * 72
阅读全文
摘要:各种Android操作系统的手机简直就是琳琅满目,屏幕分辨率的差异可想而知。目前比较主流的有WVGA=800x480,HVGA=480x320,另外的还有QVGA=320x240。当然还有魅族M9的DVGA=960x640,还有蛋疼的摩托罗拉的FWVGA=854x480。 其实,在你layout的xml文件中,编写的时候是不是用了许多的padding呢?如果是,那你就蛋疼了。因为这样的布局永远是无法适应所有手机屏幕的。 正确的做法应该是使用的是weight属性。将你控件的layout中的width、height设置为fill-parent,不要使用wrap——content。因为wrap-..
阅读全文
摘要:在4.5.6节介绍过一个<include>标签,该标签可以在布局文件中引用另外一个布局文件,并可以覆盖被引用布局文件根节点所有 与布局相关的属性,也就是以android:layout开头的属性。通过<include>标签可以将一个非常庞大的布局文件分解成若干个 较小的布局文件,而且这些小的布局文件也可以被多次引用,从而达到一个重用的目的。 <include>标签固然很好用,但有一个问题,就是布局文件中的控件并不一定在程序启动时全都用到,有一些控件只在特定的情况下才会被使用到。例如,一个阅读图书的软件只有在下载电子书时 才需要显示进度条,在平时看书时都是装载的
阅读全文
摘要:屏幕切换指的是在同一个Activity内屏幕见的切换,最长见的情况就是在一个FrameLayout内有多个页面,比如一个系统设置页面;一个个性化设置页面。通过查看OPhoneAPI文档可以发现,有个android.widget.ViewAnimator类继承至FrameLayout,ViewAnimator类的作用是为FrameLayout里面的View切换提供动画效果。该类有如下几个和动画相关的函数:lsetInAnimation:设置View进入屏幕时候使用的动画,该函数有两个版本,一个接受单个参数,类型为android.view.animation.Animation;一个接受两个参数,
阅读全文
摘要:以launcher为例说明自定义控件的属性:1、 在layout里面定义控件,如: <com.android.launcher.Workspace android:id="@+id/workspace" android:layout_width="fill_parent" android:layout_height="fill_parent" launcher:defaultScreen="1"> <include android:id="@+id/cell1" layout=
阅读全文
摘要:使用 Button 时为了让用户有“按下”的效果,有两种实现方式: 1.JAVA代码实现: imageButton.setOnTouchListener(new OnTouchListener(){ @Override public boolean onTouch(View v, MotionEvent event) { if(event.getAction() == MotionEvent.ACTION_DOWN){ //更改为按下时的背景图片 v.setBackgroundResource(R.drawable.pressed); }else if(event.g...
阅读全文
摘要:安全多线程本文将要讨论Android应用程序所使用的线程模型以及Android应用程序是怎样通过产生工作线程来完成那些耗时的工作,而不是在主线程 里处理这些工作来保证UI的性能的。同时本文还会对 应用程序与主线程中的Android UI toolkit组件交互以及产生托管工作线程的API进行解释。Android UI线程当一个应用程 序运行时,Android系统自动的为该应用程序创建一个叫做“Main”的主线程。“Main”线程,也叫UI线程,是一个十分重要的线程,他负责把包 括UI绘制在内的所有事件分发到适当的Widget(UI组件)上面。同时,它还是你的应用程序与Android UI to
阅读全文
摘要:关于怎么使用看文档和这个例子就够了,下面说下,使用时的注意事项:1. AsyncTask对象不可重复使用,也就是说一个AsyncTask对象只能execute()一次,否则会有异常抛 出"java.lang.IllegalStateException: Cannot execute task: the task is already running"2. 在doInBackground()中要检查isCancelled()的返回值,如果你的异步任务是可以取消的话。cancel()仅仅是给AsyncTask对象设置了一个标识位,当调用了cancel()后,发生的事情只有:As
阅读全文
摘要:普通方法弹出alert后,取消标题还会有小部分高度,这个倒会好些: 先定义一个样式 res/values/styles.xml <?xml version="1.0" encoding="utf-8"?> <resources> <style name="FullHeightDialog" parent="android:style/Theme.Dialog"> <item name="android:windowNoTitle">true<
阅读全文
摘要:一个Bug前几日出现这样一个Bug是一个RuntimeException,详细信息是这样子的:java.lang.IllegalArgumentException: View not attached to window manager at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:356) at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:201) at android.view.Window$LocalWin
阅读全文