版权声明:本文为博主原创文章,未经博主允许不得转载。 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);
}
没有太多代码,如有不足之处请指正,一起学习
需要源代码请点击源码