Android开发经验之在图片上随意点击移动文字
openkk
13年前
只要在图片范围之内,文字可随意点击移动。
package xiaosi.GetTextImage; import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; import android.util.DisplayMetrics; import android.view.MotionEvent; import android.view.View; import android.view.WindowManager; public class GetTextImage extends View { private float x = 20, y = 40; private static float windowWidth; private static float windowHeight; private static float left = 0; //图片在屏幕中位置X坐标 private static float top = 0; //图片在屏幕中位置Y坐标 private String str = "我爱你"; private DisplayMetrics dm = new DisplayMetrics(); //用于获取屏幕的高度和宽度 private WindowManager windowManager; private Bitmap newbitmap; public GetTextImage(Context context) { super(context); windowManager = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); //屏幕的宽度 windowWidth = windowManager.getDefaultDisplay().getWidth(); //屏幕的高度 windowHeight = windowManager.getDefaultDisplay().getHeight(); } public void onDraw(Canvas canvas) { Resources res = getResources(); Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.b); newbitmap = getTextImage(bmp, str, x, y); canvas.drawBitmap(newbitmap, 0, 0, null); } /** * 返回值: Bitmap 参数:原图片,文字 功能: 根据给定的文字生成相应图片 * * @param originalMap * @param text 文字 * @param x 点击的X坐标 * @param y 点击的Y坐标 * @return */ public static Bitmap getTextImage(Bitmap originalMap, String text, float x, float y) { float bitmapWidth = originalMap.getWidth(); float bitmapHeight = originalMap.getHeight(); // 定义画布 Canvas canvas = new Canvas(originalMap); // 定义画笔 Paint paint = new Paint(); //获得文本的长度(像素) float textWidth = paint.measureText(text); canvas.drawBitmap(originalMap, 0, 0, null); // 如果图片宽度小于屏幕宽度 if (left + bitmapWidth < windowWidth) { // 右边界 if (x >= left + bitmapWidth - textWidth) { x = left + bitmapWidth - textWidth; } // 左边界 else if (x <= left) { x = left; } } else { // 右边界 if (x >= windowWidth - textWidth) { x = windowWidth - textWidth; } // 左边界 else if (x <= 0) { x = 0; } } // 如果图片高度小于屏幕高度 if (top + bitmapHeight < windowHeight) { // 下 if (y >= top + bitmapHeight) { y = top + bitmapHeight; } // 上 else if (y <= top + 10) { y = top + 10; } } else { if (y >= windowHeight) { y = windowHeight; } else if (y <= 0) { y = 0; } } // 添加字 canvas.drawText(text, x, y, paint); return originalMap; } @Override public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { x = event.getX(); y = event.getY(); // 重绘 invalidate(); } return true; } }
package xiaosi.GetTextImage; import android.app.Activity; import android.os.Bundle; public class GetTextImageActivity extends Activity { /** Called when the activity is first created. */ private GetTextImage get; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); get = new GetTextImage(this); setContentView(get); } }转自:http://blog.csdn.net/sjf0115/article/details/7311501