写篇文章持续记录下平常写Android代码时用到的小技巧。
1、项目统一Android版本
project的build.gradle设置,buildscript
里添加
ext {
compileSdkVersion = 29
buildToolsVersion = "30.0.1"
minSdkVersion = 26
targetSdkVersion = 29
}
模块的build.gradle设置,android
里替换
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
defaultConfig
里替换
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
2、项目使用Java 8
模块的android
里添加
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
3、设置apk生成的名字
app的build.gradle里定义静态方法
static def releaseTime() {
return new Date().format("yyyyMMdd", TimeZone.getTimeZone("UTC"))
}
android
里添加
applicationVariants.all {
variant ->
variant.outputs.all {
def buildName = rootProject.name
def type = variant.buildType.name
def apkName = "${buildName}_${type}_${versionName}_" + releaseTime()
outputFileName = apkName + ".apk"
}
}
4、Surface设置黑屏
使用MediaCodec解码输出到SurfaceView,播放结束后SurfaceView上会保留最后一帧的画面,使用以下语句将Surface设置为黑屏
SurfaceHolder holder = surfaceView.getHolder();
holder.setFormat(PixelFormat.TRANSPARENT);
holder.setFormat(PixelFormat.OPAQUE);
5、控件水波纹效果
android:foreground="?android:selectableItemBackground"
6、控件拖动
private float dx;
private float dy;
view.setOnTouchListener((v, event) -> {
// 边界限制坐标
int xBound = parentView.getWidth() - v.getWidth();
int yBound = parentView.getHeight() - v.getHeight();
// 移动后左上角坐标
float newX = event.getRawX() + dx;
float newY = event.getRawY() + dy;
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
dx = v.getX() - event.getRawX();
dy = v.getY() - event.getRawY();
break;
case MotionEvent.ACTION_MOVE:
v.animate()
.x(newX)
.y(newY)
.setDuration(0)
.start();
break;
case MotionEvent.ACTION_UP:
// 限制边界
newX = newX < 0 ? 0 : newX + v.getWidth() > parentView.getWidth() ? xBound : newX;
newY = newY < 0 ? 0 : newY + v.getHeight() > parentView.getHeight() ? yBound : newY;
v.animate()
.x(newX)
.y(newY)
.setDuration(0)
.start();
v.performClick();
break;
}
return true;
});