Android事件分发-View的事件分发机制
一. 简单的概念说明
安卓的事件传递机制,最重要的就是 dispatchTouchEvent(),onInterceptTouchEvent() 和 onTouchEvent() 三个方法。
VIewGroup,这三个方法都拥有。View,只拥有dispatchTouchEvent() 和 onTouchEvent() 两个方法。
dispatchTouchEvent 负责分发事件,在 dispatchTouchEvent 里又会调用 onTouchEvent 表示执行事件,或者说消费事件。
一般情况下 ViewGroup 的 dispatchTouchEvent 方法比较好理解,就是分发给ViewGroup的子类去处理这个事件,然而为什么View也同样有这个方法呢?原因就是View 可以注册很多事件监听器,例如:单击事件(onClick)、长按事件(onLongClick)、触摸事件(onTouch),并且View自身也有 onTouchEvent 方法。
二. 简单的例子说明1234567891011121314151617181920212223242526272829 ...
Android随笔-Bitmap的简单使用
一. 将图片资源文件的位图画到新的位图上1234567891011//根据图片生成原位图,不能直接对原位图进行操作Bitmap orgBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.head);//创建了一个和原位图一样大小,基本设置一样的空白位图Bitmap copBitmap = Bitmap.createBitmap(orgBitmap.getWidth(), orgBitmap.getHeight(), orgBitmap.getConfig());//根据matrix将原位图画到空白位图里Canvas canvas = new Canvas(copBitmap);Matrix matrix = new Matrix();Paint paint = new Paint();canvas.drawBitmap(orgBitmap,matrix,paint);
1.获得一个图片资源的源位图
...
Android随笔-ImageView中src和background的区别以及adjustViewBounds
ImageView中XML属性src和background的区别
background会根据ImageView组件给定的长宽进行拉伸,而src就存放的是原图的大小,不会进行拉伸。
src是图片内容(前景),background是背景,可以同时使用。
scaleType只对src起作用;bg可设置透明度,比如在ImageButton中就可以用Android:scaleType控制图片的缩放方式。
ImageView中的adjustViewBounds
ImageView:Android里用来显示图片的控件。ImageView的长宽可以设定为固定值:比如,100dp或match_parent。也可以设定为不固定值:wrap_content。
ImageView的比例:ImageView的长/宽
图片:要显示在ImageView上的图片,起长宽由其物理size决定的。比如200px*300px等。
图片的比例:图片的长/宽
图片如何被显示在ImageView上,由scaleType、adjustViewBounds等属性共同决定。
ImageView的默认scaleType ...
Android随笔-onCreate()等方法中控件的大小还没有测量出来,如何获取控件的大小
最常用的解决方式1234567view.post(new Runnable() { @Override public void run() { int width = view.getWidth(); int height = view.getHeight(); }});
原理:
当 View 还没 attachedToWindow 时,会先将这些 Runnable 操作缓存下来。
如果 View.post(Runnable) 的 Runnable 操作没有被缓存下来,就直接通过 mAttachInfo.mHandler 将这些 Runnable 操作 post 到主线程的 MessageQueue 中等待执行。
如果 View.post(Runnable) 的 Runnable 操作被缓存下来了,那么这些操作将会在 dispatchAttachedToWindow() 被回调时,通过 mAttachInfo.mHandler.post() 发送到主线程的 MessageQueue ...
算法题解-面试题 17.24. 最大子矩阵
1.题目描述面试题 17.24. 最大子矩阵
给定一个正整数和负整数组成的 N × M 矩阵,编写代码找出元素总和最大的子矩阵。
返回一个数组 [r1, c1, r2, c2],其中 r1, c1 分别代表子矩阵左上角的行号和列号,r2, c2 分别代表右下角的行号和列号。若有多个满足条件的子矩阵,返回任意一个均可。
注意:本题相对书上原题稍作改动
示例:
1234567输入:[ [-1,0], [0,-1]]输出: [0,1,0,1]解释: 输入中标粗的元素即为输出所表示的矩阵
说明:
1 <= matrix.length, matrix[0].length <= 200
2.代码实现12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910 ...
算法题解-152. 乘积最大子序列
1.题目描述152. 乘积最大子数组
给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。
示例 1:
123输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。
示例 2:
123输入: [-2,0,-1]输出: 0解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。
2.代码实现1234567891011121314151617181920212223242526272829303132class Solution { public int maxProduct(int[] nums) { //总的数组的最大乘积 int max = Integer.MIN_VALUE; //以当前节点为根节点的最大子数组的最大乘积 int subMax = 1; //由于存在负数,那么会导致最大的变最小的,最小的变最大的。 / ...
算法题解-53. 最大子序和 面试题42. 连续数组的最大和
1.题目描述53. 最大子序和
面试题42. 连续子数组的最大和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例:
123输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
进阶:
如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。
2.代码实现123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111package swu.xl.algorithm.code_03_17.experiment_3;public class Solution ...
算法题解-46. 全排列
1.题目描述46. 全排列
给定一个 没有重复 数字的序列,返回其所有可能的全排列。
示例:
12345678910输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]
2.代码实现1234567891011121314151617181920212223242526272829303132333435363738394041424344class Solution { public List<List<Integer>> permute(int[] nums) { //创建一个集合用于返回 List<List<Integer>> perms = new ArrayList<>(); //调用函数得到想要的结果 permute_recursion(nums,0,perms); retu ...