安卓 加载图片并在上面画图
2017-11-15 20:46
543 查看
像Ps上的应用一样,我们加载一个图片然后在上面增加各种我们需要的挂件,文字效果等。我们今天完成一个简单的Demo
package com.example.fingerdraw; import java.io.FileNotFoundException; import java.io.OutputStream; import android.app.Activity; import android.content.ContentValues; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.Bitmap.CompressFormat; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Matrix; import android.graphics.Paint; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore.Images.Media; import android.view.Display; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnTouchListener; import android.widget.Button; import android.widget.ImageView; import android.widget.Toast; public class MainActivity extends Activity implements OnTouchListener, OnClickListener { private ImageView image; private Paint paint; private Canvas canvas; private Bitmap bitmap; private Bitmap alterBitmap; private Button choose; private Button save; private final static int RESULT = 0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); image = (ImageView) findViewById(R.id.image); choose = (Button) findViewById(R.id.chooseButton); save=(Button)findViewById(R.id.saveButton); /* * bitmap = Bitmap.createBitmap(getWindowManager().getDefaultDisplay() * .getWidth(), getWindowManager().getDefaultDisplay().getHeight(), * Bitmap.Config.ARGB_8888); canvas = new Canvas(bitmap);// 画板 paint = * new Paint();// 画刷 paint.setColor(Color.BLUE); * image.setImageBitmap(bitmap); */ image.setOnTouchListener(this); choose.setOnClickListener(this); save.setOnClickListener(this); } private float downx = 0; private float downy = 0; private float upx = 0; private float upy = 0; public boolean onTouch(View v, MotionEvent event) { int action = event.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: downx = event.getX(); downy = event.getY(); break; case MotionEvent.ACTION_MOVE: // 路径画板 upx = event.getX(); upy = event.getY(); canvas.drawLine(downx, downy, upx, upy, paint); image.invalidate(); downx = upx; downy = upy; break; case MotionEvent.ACTION_UP: // 直线画板 upx = event.getX(); upy = event.getY(); canvas.drawLine(downx, downy, upx, upy, paint); image.invalidate();// 刷新 break; default: break; } return true; } public void onClick(View arg0) { if(arg0==choose){ Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(intent, RESULT); }else if(arg0==save){ //保存画好的图片 if(alterBitmap!=null){ try { Uri imageUri=getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, new ContentValues()); OutputStream outputStream=getContentResolver().openOutputStream(imageUri); alterBitmap.compress(CompressFormat.PNG, 90, outputStream); Toast.makeText(getApplicationContext(), "save!", Toast.LENGTH_SHORT).show(); } catch (FileNotFoundException e) { e.printStackTrace(); } } } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK) { Uri imageFileUri = data.getData(); Display display = getWindowManager().getDefaultDisplay(); float dw = display.getWidth(); float dh = display.getHeight(); try { BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; bitmap = BitmapFactory.decodeStream(getContentResolver() .openInputStream(imageFileUri), null, options); int heightRatio = (int) Math.ceil(options.outHeight / dh); int widthRatio = (int) Math.ceil(options.outWidth / dw); if (heightRatio > 1 && widthRatio > 1) { if (heightRatio > widthRatio) { options.inSampleSize = heightRatio; } else { options.inSampleSize = widthRatio; } } options.inJustDecodeBounds = false; bitmap = BitmapFactory.decodeStream(getContentResolver() .openInputStream(imageFileUri), null, options); alterBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), bitmap.getConfig()); canvas = new Canvas(alterBitmap); paint = new Paint(); paint.setColor(Color.GREEN); paint.setStrokeWidth(10); Matrix matrix = new Matrix(); canvas.drawBitmap(bitmap, matrix, paint); image.setImageBitmap(alterBitmap); image.setOnTouchListener(this); } catch (FileNotFoundException e) { e.printStackTrace(); } } } }
效果:
相关文章推荐
- android 加载图片并在上面画图
- android加载图片并在上面画图
- Android-从图库中加载图片到屏幕并在上面画图
- VC对话框加载图片、改变背景颜色、画图、显示隐藏控件
- 为对话框加载背景图片并在上面输出文本
- 安卓glide 图片加载库
- 《安卓ViewPager系列自定义效果,助你打造炫酷轮播图——ViewPager+Glide+PhotView 图片相册加载效果》
- 4000 安卓中搜索本地音乐图片方面详解(音乐图片,切图,画图,描边)
- 安卓加载大背景图片或者加载大量本地资源图片时经常导致内存溢出(Out of Memory Error)推荐几种解决方案
- ionic3 懒加载 和安卓双击退出应用 动态加载图片
- 安卓Glide加载图片
- 安卓Viewpager加载大量图片的时候卡顿
- iOS 数目不定的图片加载在页面上面
- 安卓开发 listviev异步加载网络图片
- 深入安卓大图片处理机制,本地及网络图片不加载到内存预压缩
- 安卓智慧上海学习笔记系列——图片缩放模式及加载过程中设置默认图片
- 安卓官方解决加载图片内存溢出问题
- Python3实现的画图及加载图片动画效果示例
- 安卓:关于ProgressBar的设置和图片的加载
- 安卓加载大量图片