public class CustomImageView extends AppCompatImageView implements View.OnTouchListener { private float lastX, lastY; private int screenWidth, screenHeight; private int imageWidth, imageHeight; private float translationX, translationY; public CustomI…
1. 单行文本 FontMetrics.ascent 或 Paint.ascent 注意这些都是间距 ascent = ascent线的y坐标 - baseline线的y坐标; // 为负值 descent = descent线的y坐标 - baseline线的y坐标; top = top线的y坐标 - baseline线的y坐标; bottom = bottom线的y坐标 - baseline线的y坐标; center先计算 float centerY = (fontmetrics.desce…
1. OverridePendingTransition Activity过场动画,支持有限 2. ActivityOptions 可实现①效果 Flutter的hero动画 (ShareElement) ActivityOptionsCompat.makeCustomAnimation() ActivityOptionsCompat.makeClipRevealAnimation() ActivityOptionsCompat.makeScaleUpAnimation() // 下面的相关实现…
1. 安装Docker 2. 启动窗口 docker run -p 9999:9999 gcr.io/android-battery-historian/stable:3.0 --port 9999 3. 获取bugreport文件 Android7.0及以上 adb bugreport bugreport.zip Android6.0及以上 adb bugreport > bugreport.txt 4. 导入zip或txt进行分析
1. FutureBuilder Center( child: FutureBuilder( // initialData: "加载中", // future: Future.delayed(Duration(seconds: 2), () => "123"), future: Future.delayed(Duration(seconds: 2), () => throw "网络错误error"), builder: (BuildContext context, AsyncSnap…
AnimatedSwitcher> controller.drive(Tween(begin:xxx,end:xxx)) Tween(begin:xxx,end:xxx).chain(CurveTween(curve: Curves.elasticInOut)).animate(controller) CurveTween(curve: Inteval(0.5,1.0)) 动画区间(表示从后半段才开始动画) import 'package:flutter/material.dart';…
1. CyclicBarrier 线程同步。cyclicBarrier.reset(); 可以重新执行 所有线程全部完成才可以开始后续操作 CyclicBarrier cyclicBarrier = new CyclicBarrier(3); new Thread(() -> { try { Thread.sleep(10_000); System.out.println("t1 在准备 "); cyclicBarrier.await(); // 等另外一个一个线程准备好 然后开始做事情 …
import android.graphics.Color import android.graphics.drawable.GradientDrawable import android.view.View import kotlin.Exception sealed class ShapeDrawable { var next: ShapeDrawable? = null abstract fun box(drawable: GradientDrawable?): GradientDrawa…
1. Fragment状态保存和恢复 可以参考ViewPager的FragmentStatePagerAdapter适配器中的处理 // 保存 FragmentManager.saveFragmentInstanceState(fragment) // 还原 Fragment.setInitialSavedState(SavedState) 2. App 黑白化引申 父 View 的 Canvas 和 Paint 是往下分发的.所以修改父View即可(DecorView) //新建一支画笔 va…
fun View.onVisibilityChange( viewGroups: List<ViewGroup> = emptyList(), // 会被插入 Fragment 的容器集合 needScrollListener: Boolean = true, block: (view: View, isVisible: Boolean) -> Unit ) { val KEY_VISIBILITY = "KEY_VISIBILITY".hashCode() val KEY_H…