Android小技巧总结

写篇文章持续记录下平常写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;
    });
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值