1 拍照截取
原理就是通过intent调用系统的相机,拍完照后再回调进行操作,成功获取到拍完照的图片根据uri调用系统的裁剪页面,裁剪完也是在回调中进行处理,显示在页面的imageview中。
2 相册选取图片截取
原理也是通过intent打开系统的图片,用户选择完成以后在回调中根据图片的uri调用系统的裁剪页面,裁剪后在回调中进行处理并显示在本页面的控件中。
3 下面进行代码展示
佳姝1:在Xml布局文件中
<LinearLayout
android:id="@+id/main_ll"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center_horizontal">
<!--这个是自定义类CircleImageView它继承于ImageView-->
<com.example.dashixu_day2_a.CircleImageView
android:id="@+id/main_icon"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_marginTop="20dp"
android:src="@mipmap/ic_launcher"/>
<Button
android:id="@+id/main_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:text="更换头像"/>
</LinearLayout>
佳姝2:在MainActivity中
public class MainActivity extends AppCompatActivity {
//定义变量值
private CircleImageView main_icon;
private Button main_btn;
private PopWindow mpopWindow;
private static final int REQUEST_IMAGE_GET = 0;
private static final int REQUEST_IMAGE_CAPTURE = 1;
private static final int REQUEST_SMALL_IMAGE_CUTTING = 2;
private static final int REQUEST_BIG_IMAGE_CUTTING = 3;
private static final String IMAGE_FILE_NAME = "icon.jpg";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化控件及在拍照和相册选择的按钮中处理点击事件
initView();
}
//绘制水印监听关键代码(在Fragment使用同理)
private Bitmap createWatermark(Bitmap bitmap, String mark) {
int w = bitmap.getWidth();
int h = bitmap.getHeight();
Bitmap bmp = Bitmap.createBitmap(w, h, Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bmp);
Paint p = new Paint();
// 水印颜色
p.setColor(Color.parseColor("#c5576370"));
// 水印字体大小
p.setTextSize(40);
//抗锯齿
p.setAntiAlias(true);
//绘制图像
canvas.drawBitmap(bitmap, 0, 0, p);
//绘制文字
canvas.drawText(mark, 0, h / 2, p);
canvas.save(Canvas.ALL_SAVE_FLAG);
canvas.restore();
return bmp;
}
private void initView() {
main_icon = (CircleImageView) findViewById(R.id.main_icon);
main_btn = (Button) findViewById(R.id.main_btn);
main_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mpopWindow = new PopWindow(MainActivity.this, new View.OnClickListener() {
@Override
public void onClick(View v) {
//相册处理
mpopWindow.dismiss();
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
// 判断系统中是否有处理该 Intent 的 Activity
if (intent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(intent, REQUEST_IMAGE_GET);
} else {
Toast.makeText(MainActivity.this, "未找到图片查看器", Toast.LENGTH_SHORT).show();