Android开发经验之在图片上随意点击移动文字

只要在图片范围之内,文字可随意点击移动。

[java] view plain copy

  1. package xiaosi.GetTextImage;
  2. import android.content.Context;
  3. import android.content.res.Resources;
  4. import android.graphics.Bitmap;
  5. import android.graphics.BitmapFactory;
  6. import android.graphics.Canvas;
  7. import android.graphics.Paint;
  8. import android.util.DisplayMetrics;
  9. import android.view.MotionEvent;
  10. import android.view.View;
  11. import android.view.WindowManager;
  12. public class GetTextImage extends View
  13. {
  14. private float x = 20, y = 40;
  15. private static float windowWidth;
  16. private static float windowHeight;
  17. private static float left = 0;      //图片在屏幕中位置X坐标
  18. private static float top = 0;       //图片在屏幕中位置Y坐标
  19. private String str = "我爱你";
  20. private DisplayMetrics dm = new DisplayMetrics();  //用于获取屏幕的高度和宽度
  21. private WindowManager windowManager;
  22. private Bitmap newbitmap;
  23. public GetTextImage(Context context)
  24. {
  25. super(context);
  26. windowManager = (WindowManager) context
  27. .getSystemService(Context.WINDOW_SERVICE);
  28. //屏幕的宽度
  29. windowWidth = windowManager.getDefaultDisplay().getWidth();
  30. //屏幕的高度
  31. windowHeight = windowManager.getDefaultDisplay().getHeight();
  32. }
  33. public void onDraw(Canvas canvas)
  34. {
  35. Resources res = getResources();
  36. Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.b);
  37. newbitmap = getTextImage(bmp, str, x, y);
  38. canvas.drawBitmap(newbitmap, 0, 0, null);
  39. }
  40. /**
  41. * 返回值: Bitmap 参数:原图片,文字 功能: 根据给定的文字生成相应图片
  42. *
  43. * @param originalMap
  44. * @param text  文字
  45. * @param x  点击的X坐标
  46. * @param y  点击的Y坐标
  47. * @return
  48. */
  49. public static Bitmap getTextImage(Bitmap originalMap, String text, float x,
  50. float y)
  51. {
  52. float bitmapWidth = originalMap.getWidth();
  53. float bitmapHeight = originalMap.getHeight();
  54. // 定义画布
  55. Canvas canvas = new Canvas(originalMap);
  56. // 定义画笔
  57. Paint paint = new Paint();
  58. //获得文本的长度(像素)
  59. float textWidth = paint.measureText(text);
  60. canvas.drawBitmap(originalMap, 0, 0, null);
  61. // 如果图片宽度小于屏幕宽度
  62. if (left + bitmapWidth < windowWidth)
  63. {
  64. // 右边界
  65. if (x >= left + bitmapWidth - textWidth)
  66. {
  67. x = left + bitmapWidth - textWidth;
  68. }
  69. // 左边界
  70. else if (x <= left)
  71. {
  72. x = left;
  73. }
  74. }
  75. else
  76. {
  77. // 右边界
  78. if (x >= windowWidth - textWidth)
  79. {
  80. x = windowWidth - textWidth;
  81. }
  82. // 左边界
  83. else if (x <= 0)
  84. {
  85. x = 0;
  86. }
  87. }
  88. // 如果图片高度小于屏幕高度
  89. if (top + bitmapHeight < windowHeight)
  90. {
  91. // 下
  92. if (y >= top + bitmapHeight)
  93. {
  94. y = top + bitmapHeight;
  95. }
  96. // 上
  97. else if (y <= top + 10)
  98. {
  99. y = top + 10;
  100. }
  101. }
  102. else
  103. {
  104. if (y >= windowHeight)
  105. {
  106. y = windowHeight;
  107. }
  108. else if (y <= 0)
  109. {
  110. y = 0;
  111. }
  112. }
  113. // 添加字
  114. canvas.drawText(text, x, y, paint);
  115. return originalMap;
  116. }
  117. @Override
  118. public boolean onTouchEvent(MotionEvent event)
  119. {
  120. if (event.getAction() == MotionEvent.ACTION_DOWN)
  121. {
  122. x = event.getX();
  123. y = event.getY();
  124. // 重绘
  125. invalidate();
  126. }
  127. return true;
  128. }
  129. }

[java] view plain copy

  1. package xiaosi.GetTextImage;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. public class GetTextImageActivity extends Activity {
  5. /** Called when the activity is first created. */
  6. private GetTextImage get;
  7. @Override
  8. public void onCreate(Bundle savedInstanceState) {
  9. super.onCreate(savedInstanceState);
  10. get = new GetTextImage(this);
  11. setContentView(get);
  12. }
  13. }
时间: 2024-10-05 05:01:40

Android开发经验之在图片上随意点击移动文字的相关文章

android自定义View实现图片上传进度显示(仿手机QQ上传效果)

首先看下我们想要实现的效果如下图(qq聊天中发送图片时的效果): 再看一下我实现的效果: 1.效果已经看见了,下面我们来实现它.首先我创建一个android工程ProgressImageView.然后我们重写ImageView控件,创建ProcessImageView类代码如下: package com.example.processimageview; import android.annotation.SuppressLint; import android.content.Context;

android自定义ImageView仿图片上传

Activity代码 1 public class MainActivity extends AppCompatActivity {   2     ProcessImageView processImageView =null;   3     int progress=0;   4    5     @Override   6     protected void onCreate(Bundle savedInstanceState) {   7         super.onCreate

话说android端七牛图片上传

七牛图片上传业务流程如下图(这是官方的图): 由上图可知,要想实现图片上传,是要三端进行交互的(我刚刚开始以为只要七牛服务器跟客户端交互就行) 接下来步骤如下: 1.首先肯定是要有一个七牛的账号,并创建一个空间 2.客户端向业务服务器(也就是客户端的应用服务器)发请求你要上传多上张图片 3.业务服务器根据客户端的请求向七牛云存储生成token(应用的服务器下载好相应的七牛sdk然后根据接口文档所述向七牛服务器请求token,token相当于一把钥匙,具体代码我也不知道怎么实现,毕竟我不是写后台的

在图片上绘制图形和添加文字

使用opencv读取图片,在图片上绘制线条.矩形.圆.多边形和添加文字 1.画线 #!/usr/bin/python3 # -*- coding:utf-8 -*- import cv2 import numpy as np # 读取一张图片 img = cv2.imread('img.jpg',cv2.IMREAD_COLOR) #画线 , 目标,起始坐标,终点坐标,颜色,线宽 cv2.line(img,(10,10),(200,100),(255,255,255),5) #画矩形 , 目标,

android BadgeView的使用(图片上的文字提醒)

BadgeView主要是继承了TextView,所以实际上就是一个TextView,底层放了一个label,可以自定义背景图,自定义背景颜色,是否显示,显示进入的动画效果以及显示的位置等等: 这是Git上的一个开源项目. 1.从https://github.com/jgilfelt/android-viewbadger上下载android-viewbadger.jar包 2.打开activity_main.xml <LinearLayout xmlns:android="http://sc

Android模仿QQ空间图片上传——原理

MainActivity.class package com.example.imagedemotext; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import an

Android EditText中插入图片并响应点击事件

EditText中插入图片基本就是两种方法: 1,通过Html.fromHtml(..)来实现 [mw_shl_code=java,true]eText.append(Html.fromHtml("<img src='" + R.drawable.ohoh + "'/>", imageGetter, null));[/mw_shl_code] 2,通过ImageSpan与SpannableString/SpannableStringBuilder. [m

ASP.NET图片上传,加水印文字和水印图片!

看了清清月儿的这篇文章让自己受益匪浅,但是觉得还有一些问题.上传图片后还有原来的图片文件存在,觉得这样很不爽,调用file类的delete方法删除原来没有生成水印的图片另外自己又加了一个限制图片大小的函数 1.最简单的单文件上传(没花头) 效果图:说明:这是最基本的文件上传,在asp.net1.x中没有这个FileUpload控件,只有html的上传控件,那时候要把html控件转化为服务器控件,很不好用.其实所有文件上传的美丽效果都是从这个FileUpload控件衍生,第一个例子虽然简单却是根本

WebUploader 图片上传点击按钮无反应

由于使用display:none来设置的隐藏,每次刷新后对应的id为filePicker的div的宽高都默认为1px,按钮当然没有反应,网上找了很多具体都说不要使用display:none,使用css样式来设置.以下语句即解决了此问题. <style> #filePicker div:nth-child(2){width:100%!important;height:100%!important;} </style> 原文地址:https://www.cnblogs.com/nanj