|
我们在自定义 View 控件时随处可见 Matrix 的身影,主要用于坐标转换映射,我们可以通过 Matrix 矩阵来控制视图的变换。 Matrix 本质上是一个如下图所示的矩阵: 上面每个值都有其对应的操作。 Matrix 提供了如下几个操作: 缩放(Scale) 对应 MSCALE_X 与 MSCALE_Y 位移(Translate) 对应 MTRANS_X 与 MTRANS_Y 错切(Skew) 对应 MSKEW_X 与 MSKEW_Y 旋转(Rotate) 旋转没有专门的数值来计算,Matrix 会通过计算缩放与错切来处理旋转。 数学原理 我们先来简单的复习一下矩阵乘法规则。 我们在使用 Matrix 处理视图变换时本质上是通过矩阵映射坐标。 所以上述的几个操作都是对矩阵的操作,我们新建一个 Matrix 后其矩阵为默认状态,其值如下: 可以看到默认状态下....
|
|
多指触控是指监听多个手指的触控事件,我们可以重写 View 中的 onTouchEvent 方法,或者使用 setOnTouchListener 方法来处理触摸事件。 首先我们来看一下如何判断多指触摸时的事件类型。 MotionEvent 中的事件类型 一般而言,我们通过判断 MotionEvent 的 action 来判断输入事件类型,从而做出相应的处理。 在不考虑多指的情况下,我们一般只关注如下几个事件类型: MotionEvent.ACTION_DOWN 第一根手指点击屏幕 MotionEvent.ACTION_UP 最后一根手指离开屏幕 MotionEvent.ACTION_MOVE 屏幕上有手指在滑动 MotionEvent.ACTION_CANCEL 事件被拦截 那么对于多指触控来说,除了上述常用的几种事件类型之外,我们还需要关注另外两个事件类型: MotionEvent.ACTION_PO....
|
|
缓存模块 我在分析 Glide 源码前将 Glide 的项目 clone 到了本地,阅读时添加了很多注释以及自己的理解等等,现在已经推到了 Github 上,有兴趣的同学可以看看: https://github.com/0xZhangKe/Glide-note 缓存模块涉及到的东西比较多,比较重要,所以需要单独用一章节来讲。 关于缓存的获取、数据加载相关的逻辑在 Engine#load 方法中。 先来看看缓存流程,流程如下图: 全部的缓存流程大致如上图所示。 Glide 实例化时会实例化三个缓存相关的类以及一个计算缓存大小的类: //根据当前机器参数计算需要设置的缓存大小 MemorySizeCalculator calculator = new MemorySizeCalculator ( context ); //创建 Bitmap 池 if ( bitmapPool == null....
|
|
项目编译 项目基于最新版 Glide 4.9.0 源码 分析,通过如下方式获取并编译代码: git clone https://github.com/bumptech/glide.git cd glide ./gradlew jar 我在分析 Glide 源码前将 Glide 的项目 clone 到了本地,阅读时添加了很多注释以及自己的理解等等,现在已经推到了 Github 上,有兴趣的同学可以看看: https://github.com/0xZhangKe/Glide-note 总览 有一点需要说明的是,Glide 源码很复杂, 涉及到的东西也很多,这里不能面面俱到,只是把我认为重要的东西介绍了一下,可能还有一些疏漏。 首先我将 Glide 分成了几个模块,让大家有个整体的印象,自顶向下的分析源码,从而实现降维打击。 按照逻辑功能划分,可以把 Glide 框架大概的分成如下几个部分: Glide 大体上可以分为如上几个模块。 下面通过....
|
|
QRCodeView 基于 com.google.zxing 开发,用于简化 Android 设备扫描、生成二维码等操作。 前言 QRCodeView 基于 Google 的 zxing 进行二次开发,简化二维码的相关操作、优化识别速度。由于整个 zxing 框架中不仅包含了二维码识别相关的代码,还包括其他格式如条形码等等的代码,体量较大,实际开发中一般只需要使用二维码,故本项目中删除了不必要的代码。本项目不仅提供了使用摄像头预览实时识别二维码,还有如生成一张二维码图片,生成一张带有 logo 的二维码图片等等。 注意:此项目只支持二维码,不支持其他格式的条码! 效果图 集成方式 在 app/build.gradle 中添加依赖: implementation 'com.github.0xZhangKe:QRCodeView:1.3' 如果依赖失败还要在根目录的 builde.gradle 中添加仓库: maven { url....
|
|
Handler Handler 主要用于在不同的线程中相互通信,使用场景最多的应该就是在子线程中更新 UI。 与 Handler 相关的类: Handler :处理与发送消息(Message) Message :消息的包装类 Looper :整个 Handler 通信的核心,接受 Handler 发送的 Message,循环遍历 MessageQueue 中的 Message,并发送至 Handler 处理 MessageQueue :保存 Message LocalThread :存储 Looper 与 Looper所在线程的信息 关系流程图: 上图简单概括为: Handler 将 Message post 或者 send 到 MessageQueue 中,Looper 不断循环从 MessageQueue 中取出 Message 交由 Handler 来处理。 Handler 消息处理 Handler 处理消息的方法为 dispatchMe....
|
|
In Guinea laufen Hühner überall rum, sie sind schmal und schmächtig, leicht und knochig wie Rennradfahrer.
|
|
Wer Videos über Vimeo oder youtube publiziert, muss sich mit solchen Fragen nicht beschäftigen. Für die zwei Leute, die selber noch Videos in mp4 konvertieren um sie dann in ihre Webseiten einbinden ist es vieleicht interessant. Also vielleicht interessant zu erfahren, dass ich lange Zeit es falsch gemacht habe mit direkten Exporten aus FinalCut oder MPEGStreamclip. Es geht besser mit ffmpeg. FFMPEG kann man recht leicht mit Homebrew ..
|
|
Aus der Magisterprüfung der Julia Emmler. Jetzt neu - man kann die Videos mit Sound anschauen. Es lohnt sich!
|
|
Vor einem Jahr auf Rügen war es so kalt, vor einem Jahr auf Rügen war es so kalt, dass der Sanddornsaft einfror in der Verpackung, wenn man ihn draußen gelassen hat. Es war so kalt, dass der Laub bei jedem Schritt in Staub zerfiel, den ganzen Wald erschütternd. So kalt, dass die Dunkelheit sich nicht traute zu kommen, wartete nebenan den ganzen Tag lang, und wenn sie dann endlich kam, fiel sie in Flocken vom Himmel. Es war so kalt, ..
|
|
Der Anblick von Guinäer in Militäruniformen oder mit Sonnenbrillen erzeugt bei mir ein ungutes Gefühl in der Magengegend. Zum Teil durch die Bilder der Berichterstattung aus Afrika verursacht, zum Teil aus der Erinnerung an meine erste Reise. Da wollte ich mal ein Bild von der Straße machen, und ein paar entlang spazierende Militärs haben es gesehen. Natürlich wollten sie die Kamera konfiszieren, weil es ja illegal ist, Militäreinrichtungen..
|
|
Alassan (links) und Alcin. Auch Mbo genannt, weil niemand sie auseinander halten kann. Sehr ernste Leute. Am dritten Tag kam Alassan nicht zu den Übungen, da er mit 40° Fieber im Bett lag. Im Krankenhaus steckten benutzte Nadeln aus dem Bett, und so hat Christoph ihn einfach mit Antibiotika gefüttert, und mit Käsebrot, und dann ging es schon. Den Alcin musste ich beim feierlichen Drehabschluss aus dem Pool ziehen, als er in der Mitte vo..
|
|
Wenn man nach langem Flug noch auf den verspäteten Zug warten muss, kann man den Gang der Menschen beobachten. Wie sie das Knie voranschleudern, und der Unterschenkel schwingt mit und die Ferse trifft gewaltsam auf den Boden. Oder da läuft jemand sehr kontrolliert, schwunglos, und stellt sein Fuß vorsichtig ab. Und wie die Zwischenschicht zwischen Mensch und Boden die Raumposition und Bewegungsablauf beeinflußt! Ein Wunder, dass sie n..
|
|
Es saß auf der Poolwand eine Eidechse, die hatte ihren Schwanz unter Wasser. Sie bewegte sich nicht, nur das Wasser schwappte auf und ab und es schien, als würde sie mit dem Schwanz wedeln. Ich habe das gefilmt, zwanzig Minuten lang, wie die Eidechse ihren Schwanz bewegt, also nicht die Eidechse und nicht den Schwanz, aber es sah ja so aus. Ich habe das gefilmt, und die Speicherkarte in die Hosentasche getan, weil sie voll war, die Speich..
|
|
Die Flut kommt und bringt Sachen mit. Die Ebbe kommt, und zeigt sie. Manchmal kommen ältere Spieler und tragen den Müll zur Seite. Danach kommt wieder die Flut. Das ist der Lauf der Dinge.
|
|
Der Ozean ist sanft und verzeiht niemandem. Der Ozean ist sanft und gibt den Rhythmus vor. Gibt den Rhythmus vor mit Ebbe und Flut. Gibt den Rhythmus vor mit jeder Welle, die ankommt und bricht. Der Ozean atmet, und die Menschen passen sich dem Atem an, wie zwei Verliebte die einander umarmen. Der Ozean ist laut: zuerst ist die Flut laut, dann die Welle, dann der Teil der Welle, der gerade aufbricht, dann das Tröpfchen, dann der S..
|
|
Heute erst hab ich ein Artikel über idea debt gelesen - die große Anzahl an aufgeschriebenen Ideen kann eher hinderlich sein, und wie eine todo-Liste wirken, die man abarbeiten muss. Wer will denn sowas? Aber wohin mit den Ideen, mit den halb ausgesprochenen, halb im Mund hängenden Gedanken? Womit mit halb guten Fotos und unpassenden Anfängen? Vielleicht an diesen Ort? Vielleicht gefällt es ihnen in diesem ruhigen Teich.
|