1. Scroller public void fling(int startX, int startY, int velocityX, int velocityY, int minX, int maxX, int minY, int maxY) {} public void startScrollBy(int dx,int dy) { mScroller.forceFinished(true); int startX = getScrollX(); int startY = getScroll…
// val h = (img.width * 1.0f / img.drawable.intrinsicWidth * img.drawable.intrinsicHeight).toInt() // val animator = ValueAnimator.ofInt(img.height,h) public class LiveImageView extends AppCompatImageView { private int mDx; private int mMinDx; public…
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. 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…