android缩放图片添加文字信息

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/generallizhong/article/details/77648723

很多时候就需要什么图片上添加水印或者文字信息之类,这里就是在可缩放动态的图片上添加文字信息,直接上代码:

public class TieXieFenBuActivty extends Activity {
/*
 * http://blog.csdn.net/generallizhong
 */
	// 自定义变量
	private Button openImageBn; // 打开图片
	private Bitmap bmp; // 原始图片
	private TextView pathText; // 路径TextView
	private String path; // 存储图片路径
	private ImageView imageShow; // 显示图片
	private final int IMAGE_CODE = 0; // 打开图片
	// 触屏缩放图片
	private static final int NONE = 0; // 初始状态
	private static final int DRAG = 1; // 拖动
	private static final int ZOOM = 2; // 缩放
	private int mode = NONE; // 当前事件
	private float oldDist;
	private PointF startPoint = new PointF();
	private PointF middlePoint = new PointF();
	private Matrix matrix = new Matrix();
	private Matrix savedMatrix = new Matrix();

	// 新增按钮
	private Button wordAddBn; // 添加文字
	private Button changeImageBn; // 缩放图片
	private Button drawImageBn; // 绘制图片
	// 图片处理时显示备份
	private Bitmap alteredBitmap; // 图片
	private Canvas canvas; // 画布
	private Paint paint; // 画刷
	private RelativeLayout layout;
	// 标识变量 1-显示图片 2-添加文字 3-缩放图片 4-画图
	private int flagOnTouch = 0;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		openImageBn = (Button) findViewById(R.id.button1);
		pathText = (TextView) findViewById(R.id.textView1);
		imageShow = (ImageView) findViewById(R.id.imageView1);
		try {
			bitmap();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		// 触屏缩放图片监听 注:XML中修改android:scaleType="matrix"
		imageShow.setOnTouchListener(new OnTouchListener() {

			// 设置两个点 按下坐标(downx, downy)和抬起坐标(upx, upy)
			float downx = 0;
			float downy = 0;
			float upx = 0;
			float upy = 0;

			// 触摸事件
			@Override
			public boolean onTouch(View v, MotionEvent event) {
				ImageView view = (ImageView) v;
				// 显示图片
				if (flagOnTouch == 1) {
					return true;
				}
				// 图片缩放
				if (flagOnTouch == 3) {
					switch (event.getAction() & MotionEvent.ACTION_MASK) {
					case MotionEvent.ACTION_DOWN: // 手指按下
						savedMatrix.set(matrix);
						startPoint.set(event.getX(), event.getY());
						mode = DRAG;
						break;
					case MotionEvent.ACTION_UP:
					case MotionEvent.ACTION_POINTER_UP:
						mode = NONE;
						break;
					case MotionEvent.ACTION_POINTER_DOWN:
						oldDist = spacing(event); // 如果两点距离大于10 多点模式
						if (oldDist > 10f) {
							savedMatrix.set(matrix);
							midPoint(middlePoint, event);
							mode = ZOOM;
						}
						break;
					case MotionEvent.ACTION_MOVE:
						if (mode == DRAG) { // 拖动
							matrix.set(savedMatrix);
							matrix.postTranslate(event.getX() - startPoint.x,
									event.getY() - startPoint.y);
						} else if (mode == ZOOM) { // 缩放
							float newDist = spacing(event);
							if (newDist > 10f) {
								matrix.set(savedMatrix);
								float scale = newDist / oldDist;
								matrix.postScale(scale, scale, middlePoint.x,
										middlePoint.y);
							}
						}
						break;
					} // end switch
					view.setImageMatrix(matrix);
					return true;
				}
				// 图片文字添加
				else if (flagOnTouch == 2) {
					return true;
				}

				else {
					return false;
				}
			} // end onTouch
				// 两点距离

			private float spacing(MotionEvent event) {
				float x = event.getX(0) - event.getX(1);
				float y = event.getY(0) - event.getY(1);
				return FloatMath.sqrt(x * x + y * y);
			}

			// 两点中点
			private void midPoint(PointF point, MotionEvent event) {
				float x = event.getX(0) + event.getX(1);
				float y = event.getY(0) + event.getY(1);
				point.set(x / 2, y / 2);
			}
		});

		// 缩放图片 点击按钮"缩放"
		changeImageBn = (Button) findViewById(R.id.button3);
		changeImageBn.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				flagOnTouch = 3;
			}
		});

		// 添加水印文字
		wordAddBn = (Button) findViewById(R.id.button2);
		layout = (RelativeLayout) findViewById(R.id.Content_Layout);
			
		AddText();
	}
//这里是文字添加的方法
	public void AddText() {
		flagOnTouch = 2;
		// 添加文字
		Bitmap bmpTemp = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(),
				bmp.getConfig());
		Canvas cv = new Canvas(bmpTemp);
		Canvas cv1 = new Canvas(bmpTemp);
		Paint p = new Paint();
		Typeface font = Typeface.create("宋体", Typeface.BOLD);
		p.setColor(Color.BLUE);
		p.setTypeface(font);
		p.setTextSize(40);
		cv.drawBitmap(bmp, 0, 0, p);
		cv1.drawBitmap(bmp, 0, 0, p);
		imageShow.setImageBitmap(bmpTemp);
		cv.drawText("铁鞋5只", 40, 40, p);
		cv1.drawText("铁鞋10只", 100, 100, p);
		cv.save(Canvas.ALL_SAVE_FLAG);
		cv.restore();
	}
//这里是获取图片资源处理
	public void bitmap() {
		// Uri imageFileUri = data.getData();
		DisplayMetrics dm = new DisplayMetrics();
		getWindowManager().getDefaultDisplay().getMetrics(dm);
		int width = dm.widthPixels; // 手机屏幕水平分辨率
		int height = dm.heightPixels; // 手机屏幕垂直分辨率
		// 标识变量=1 图片显示
		flagOnTouch = 1;
		// 载入图片尺寸大小没载入图片本身 true
		BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();
		bmpFactoryOptions.inJustDecodeBounds = true;
		
		int heightRatio = (int) Math.ceil(bmpFactoryOptions.outHeight
				/ (float) height); // outHeight图像高
		int widthRatio = (int) Math.ceil(bmpFactoryOptions.outWidth
				/ (float) width); // outWidth图像宽
		// inSampleSize表示图片占原图比例 =1表示原图
		if (heightRatio > 1 && widthRatio > 1) {
			if (heightRatio > widthRatio) {
				bmpFactoryOptions.inSampleSize = heightRatio;
			} else {
				bmpFactoryOptions.inSampleSize = widthRatio;
			}
		}
		Resources r = TieXieFenBuActivty.this.getResources();
		//获取资源文件图片,也可选择手机内图片
		bmp = BitmapFactory.decodeResource(r, R.drawable.tp);

		Bitmap newb = Bitmap.createBitmap(300, 300, Config.ARGB_8888);
		imageShow.setImageBitmap(bmp);
	}
没有太多代码,如有不足之处请指正,一起学习

需要源代码请点击源码




猜你喜欢

转载自blog.csdn.net/generallizhong/article/details/77648723