package com.cjq.picturemarkerdemo; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.ImageView; import android.widget.RadioGroup; import android.widget.RelativeLayout; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import java.util.ArrayList; import java.util.List; public class ViewPagerActivity extends Activity { private PagerAdapter mPagerAdapter;//适配器 private List<ImageView> imageList; List<Bitmap> bitmaps; private int mPosition; List<String> stringTexts; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_viewpager); water1(); } private void water1() { stringTexts = new ArrayList<>(); stringTexts.add("工单号 : JS200000000000000"); stringTexts.add("工程师 : 肖宇"); stringTexts.add("经度: 6666 ,纬度:9999"); stringTexts.add("备注:"); Bitmap sourBitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.water_bg); Bitmap sourBitmap2 = BitmapFactory.decodeResource(getResources(), R.drawable.test_water2); ViewPager viewPager = findViewById(R.id.view_pager); Button button = findViewById(R.id.btn_water); Button button1 = findViewById(R.id.btn_beizhu); bitmaps = new ArrayList<>(); for (int i = 0; i < 1000; i++) { bitmaps.add(sourBitmap2); } bitmaps.add(sourBitmap1); bitmaps.add(sourBitmap2); imageList = new ArrayList<>(); viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { mPosition = position; } @Override public void onPageScrollStateChanged(int state) { } }); mPagerAdapter = new PagerAdapter() { @Override public int getCount() { return bitmaps.size(); } @Override public boolean isViewFromObject(@NonNull View view, @NonNull Object object) { return view == object; } @Override public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { container.removeView(imageList.get(position)); } @NonNull @Override public Object instantiateItem(@NonNull ViewGroup container, int position) { ImageView imageView = new ImageView(ViewPagerActivity.this); imageView.setTag(position); imageView.setImageBitmap(bitmaps.get(position)); imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); container.addView(imageView); imageList.add(imageView); return imageView; } @Override public int getItemPosition(@NonNull Object object) { View view = (View) object; if (mPosition == (Integer) view.getTag()) { return POSITION_NONE; } else { return POSITION_UNCHANGED; } } }; viewPager.setAdapter(mPagerAdapter); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { doWater(false); } }); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(ViewPagerActivity.this, EditRemarks.class); ViewPagerActivity.this.startActivityForResult(intent, 1001); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (data != null) { String remark = data.getStringExtra("remark"); stringTexts.set(stringTexts.size() -1, "备注 : " + remark); doWater(true); doWater(false); } } private void doWater(boolean isClear){ Bitmap bitmap = bitmaps.get(mPosition); Bitmap bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.test_water2); Bitmap water = ImageUtil.drawTextToLeftBottom(ViewPagerActivity.this, bitmap, stringTexts, 12, Color.RED, 30, 30, isClear); if (isClear) { bitmaps.set(mPosition, bitmap1); } else { bitmaps.set(mPosition, water); } ImageView imageView = new ImageView(ViewPagerActivity.this); imageView.setImageBitmap(bitmaps.get(mPosition)); imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); imageList.set(mPosition, imageView); mPagerAdapter.notifyDataSetChanged(); } }
package com.cjq.picturemarkerdemo; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import androidx.annotation.Nullable; public class EditRemarks extends Activity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.edit_remarks_activity); initView(); } private void initView() { Button cancelButton = findViewById(R.id.cancel_button); Button completeButton = findViewById(R.id.complete_button); EditText editText = findViewById(R.id.edit_remark); cancelButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); completeButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String s = editText.getText().toString(); Intent intent = new Intent(); intent.putExtra("remark", s); setResult(RESULT_OK, intent); finish(); } }); } }
package com.cjq.picturemarkerdemo; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Rect; import android.util.Log; import java.util.ArrayList; import java.util.List; /** * 水印图片工具类 * * @author cheng */ public class ImageUtil { public static Bitmap createWaterMaskLeftBottom( Context context, Bitmap src, Bitmap watermark, int paddingLeft, int paddingBottom) { return createWaterMaskBitmap(src, watermark, dp2px(context, paddingLeft), src.getHeight() - watermark.getHeight() - dp2px(context, paddingBottom)); } private static Bitmap createWaterMaskBitmap(Bitmap src, Bitmap watermark, int paddingLeft, int paddingTop) { if (src == null) { return null; } int width = src.getWidth(); int height = src.getHeight(); //创建一个bitmap Bitmap newBitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888);// 创建一个新的和SRC长度宽度一样的位图 //将该图片作为画布 Canvas canvas = new Canvas(newBitmap); //在画布 0,0坐标上开始绘制原始图片 canvas.drawBitmap(src, 0, 0, null); //在画布上绘制水印图片 canvas.drawBitmap(watermark, paddingLeft, paddingTop, null); // 保存 canvas.save(); // 存储 canvas.restore(); return newBitmap; } /** * 绘制文字到左下方 * * @param context * @param bitmap * @param text * @param size * @param color * @param paddingLeft * @param paddingBottom * @return */ public static Bitmap drawTextToLeftBottom(Context context, Bitmap bitmap, List<String> text, int size, int color, int paddingLeft, int paddingBottom, boolean isClear) { Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); paint.setColor(color); paint.setTextSize(dp2px(context, size)); Rect bounds = new Rect(); return drawTextToBitmap(context, bitmap, text, paint, bounds, dp2px(context, paddingLeft), bitmap.getHeight() - dp2px(context, paddingBottom), isClear); } /** * 图片上绘制文字 */ private static Bitmap drawTextToBitmap(Context context, Bitmap bitmap,List<String> text, Paint paint, Rect bounds, int paddingLeft, int paddingBottom, boolean isClear) { Config bitmapConfig = bitmap.getConfig(); paint.setDither(true); // 获取跟清晰的图像采样 paint.setFilterBitmap(true);// 过滤一些 if (bitmapConfig == null) { bitmapConfig = Config.ARGB_8888; } bitmap = bitmap.copy(bitmapConfig, true); Canvas canvas = new Canvas(bitmap); if (isClear) { } else { for (int i = 0; i< text.size(); i++ ) { paint.getTextBounds(text.get(i), 0, text.get(i).length(), bounds); canvas.drawText(text.get(i), paddingLeft, paddingBottom - (text.size()-1 -i) * dp2px(context,20), paint); } } return bitmap; } /** * dip转pix * * @param context * @param dp * @return */ public static int dp2px(Context context, float dp) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dp * scale + 0.5f); } }
edit_remarks_activity
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:id="@+id/cancel_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="取消" android:textSize="24sp" /> <Button android:id="@+id/complete_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="end" android:layout_alignParentEnd="true" android:text="完成" android:textSize="24sp" /> </RelativeLayout> <EditText android:id="@+id/edit_remark" android:layout_width="match_parent" android:layout_height="wrap_content"/> </LinearLayout>
colors
<color name="keyBoardActivity">#99000000</color>
styles
<style name="myTransparent" parent="Theme.AppCompat.Light.NoActionBar"> <item name="android:windowBackground">@color/keyBoardActivity</item> <item name="android:windowNoTitle">true</item> <item name="android:windowIsTranslucent">true</item> <item name="android:windowAnimationStyle">@android:style/Animation.Translucent</item> </style>