简介#
代码是从github的:https://github.com/wuapnjie/StickerView fork 来
StikerView --- 贴纸 view (托拽、缩放、合成保存等功能)
扩展介绍- android M 之后的权限代码处理#
Google Play Services and Runtime Permissions
android 权限的处理方式:
在android M(6.0) 开始,权限的确认需要在用户首次使用时确认(之前是安装的时候确认)。那么相应的代码逻辑也要发生改变了----- 主要就是用户同意权限怎么着,不同意怎么着 if...else 的处理方式。
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// Check Permissions Now
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_LOCATION);
} else {
// permission has been granted, continue as usual
Location myLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
}
public void onRequestPermissionsResult(int requestCode,
String[] permissions,
int[] grantResults) {
if (requestCode == REQUEST_LOCATION) {
if(grantResults.length == 1
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// We can now safely use the API we requested access to
Location myLocation =
LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
} else {
// Permission was denied or request was cancelled
}
}
}
代码实现分析#
主activity就是 MainActivity extends AppCompatActivity 没有什么特别,需要注意的就是上面提到的android M 之后的权限处理。
实现其基本功能的就是 class StickerView extends ImageView
对外借口最重要的就是 addSticker ,add的最终类是自定义的Sticker 里面都有Matrix
public void addSticker(Sticker sticker)
public void addSticker(Bitmap stickerBitmap)
public void addSticker(Bitmap stickerBitmap)
- 内部操作就是由 onTouchEvent 推动的一系列 view 的变化在操作
- 主要的放大缩小,位移等操作都是由Matri来实现
- 保存则是由 BitmapUtil 类提供的两个函数完成。