Android 照片背景橡皮擦需要帮助 - 不擦除位图,而只是绘制黑线

2024-04-08

我正在开发 1 个应用程序,因为我需要删除位图,因为我所做的是...... (代码可以工作,但只是画黑线..)

@Override
        protected void onDraw(Canvas canvas) {
            
            canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
            for (PathPoints p : paths) {
                mPaint.setColor(p.getColor());
                mPaint.setXfermode(new PorterDuffXfermode(Mode.CLEAR));
                Log.v("", "Color code : " + p.getColor());
                if (p.isTextToDraw()) {
                    canvas.drawText(p.textToDraw, p.x, p.y, mPaint);
                } else {
                    canvas.drawPath(p.getPath(), mPaint);
                }
            }

但上面的代码只是绘制了 黑线 on Bitmap I have 看过这个链接 https://stackoverflow.com/questions/4650755/clearing-canvas-with-canvas-drawcolor但没有得到 其实我想要它像这样 http://www.piterwilson.com/blog/2008/05/07/bitmapdata-erasing-in-as3-with-custom-brush-shape/(在此图像中,将鼠标移到我需要的工作类型的图像上..但我无法删除位图的一部分,只是绘制黑线)我做错了什么??? 请帮我解决这个问题


终于在 1 天后我找到了解决方案......

 public class FingerPaint extends Activity {
        LinearLayout mainContainer;
        LinearLayout buttonContainer;
        LinearLayout.LayoutParams btnParams;
        Button btnText, btnSketch, btnColor, btnUndo, btnRedo, btnDone;
        // MyView drawView;
        DrawingPanel drawView;
        int lastColor = 0xFFFF0000;
        public static final int SUCCESS = 200;

        private final String TAG = getClass().getSimpleName();
        private String textToDraw = null;
        private boolean isTextModeOn = false;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            generateViews();
        }

        private void generateViews() {
            btnDone = new Button(this);
            btnDone.setLayoutParams(new LinearLayout.LayoutParams(
                    LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
            btnDone.setText(getString(R.string.btn_done));
            btnText = new Button(this);
            btnSketch = new Button(this);
            btnColor = new Button(this);
            btnUndo = new Button(this);
            btnRedo = new Button(this);
            mainContainer = new LinearLayout(this);
            mainContainer.setLayoutParams(new LinearLayout.LayoutParams(
                    LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
            mainContainer.setOrientation(LinearLayout.VERTICAL);
            buttonContainer = new LinearLayout(this);
            buttonContainer.setLayoutParams(new LinearLayout.LayoutParams(
                    LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
            buttonContainer.setOrientation(LinearLayout.HORIZONTAL);
            btnParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
                    LayoutParams.WRAP_CONTENT, 1);
            /*
             * btnText.setText("Text"); btnSketch.setText("Sketch");
             * btnColor.setText("Color"); btnUndo.setText("Undo");
             * btnRedo.setText("Redo");
             */

            btnText.setBackgroundDrawable(getResources().getDrawable(
                    R.drawable.text_mode_selector));
            btnText.setLayoutParams(btnParams);
            btnSketch.setBackgroundDrawable(getResources().getDrawable(
                    R.drawable.sketch_selector));
            btnSketch.setLayoutParams(btnParams);
            btnColor.setBackgroundDrawable(getResources().getDrawable(
                    R.drawable.color_selector));
            btnColor.setLayoutParams(btnParams);
            btnUndo.setBackgroundDrawable(getResources().getDrawable(
                    R.drawable.undo_selector));
            btnUndo.setLayoutParams(btnParams);
            btnRedo.setBackgroundDrawable(getResources().getDrawable(
                    R.drawable.redo_selector));
            btnRedo.setLayoutParams(btnParams);
            buttonContainer.addView(btnText);
            buttonContainer.addView(btnSketch);
            buttonContainer.addView(btnColor);
            buttonContainer.addView(btnUndo);
            buttonContainer.addView(btnRedo);
            // drawView=new MyView(this);
            drawView = new DrawingPanel(this, lastColor);
            drawView.setDrawingCacheEnabled(true);
            drawView.measure(
                    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
                    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
            drawView.layout(0, 0, drawView.getMeasuredWidth(),
                    drawView.getMeasuredHeight());
            drawView.buildDrawingCache(true);
            drawView.setLayoutParams(new LinearLayout.LayoutParams(
                    LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 1));
            mainContainer.addView(btnDone);
            mainContainer.addView(drawView);
            mainContainer.addView(buttonContainer);
            setContentView(mainContainer);
            btnSketch.setSelected(true);
            btnText.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    resetButtons();
                    btnText.setSelected(true);
                    AlertDialog.Builder alert = new AlertDialog.Builder(
                            FingerPaint.this);
                    alert.setMessage(getString(R.string.msg_enter_text_to_draw));
                    final EditText edText = new EditText(FingerPaint.this);
                    alert.setView(edText);
                    alert.setPositiveButton(R.string.btn_ok,
                            new DialogInterface.OnClickListener() {

                                @Override
                                public void onClick(DialogInterface dialog,
                                        int which) {
                                    // TODO Auto-generated method stub
                                    if (edText.getText().toString().length() > 0) {
                                        textToDraw = edText.getText().toString();
                                        isTextModeOn = true;
                                        ChooseActivity.displayAlert(
                                                FingerPaint.this,
                                                getString(R.string.msg_tap_image));
                                    } else {
                                        ChooseActivity
                                                .displayAlert(
                                                        FingerPaint.this,
                                                        getString(R.string.msg_enter_text_to_draw));
                                    }
                                }
                            });
                    alert.setNegativeButton(R.string.btn_cancel,
                            new DialogInterface.OnClickListener() {

                                @Override
                                public void onClick(DialogInterface dialog,
                                        int which) {
                                    // TODO Auto-generated method stub
                                    isTextModeOn = false;
                                }
                            });
                    alert.show();
                }
            });
            btnSketch.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    resetButtons();
                    btnSketch.setSelected(true);
                    isTextModeOn = false;
                }
            });
            btnColor.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    AmbilWarnaDialog dialog = new AmbilWarnaDialog(
                            FingerPaint.this, lastColor,
                            new OnAmbilWarnaListener() {
                                @Override
                                public void onOk(AmbilWarnaDialog dialog, int color) {
                                    // color is the color selected by the user.
                                    colorChanged(color);
                                }

                                @Override
                                public void onCancel(AmbilWarnaDialog dialog) {
                                    // cancel was selected by the user
                                }
                            });

                    dialog.show();
                }
            });

            btnUndo.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    drawView.onClickUndo();
                }
            });
            btnRedo.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    drawView.onClickRedo();
                }
            });
            btnDone.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    Log.v(TAG, "Here");
                    Bitmap editedImage = Bitmap.createBitmap(drawView
                            .getDrawingCache());
                    editedImage = Bitmap.createScaledBitmap(editedImage, 200, 300,
                            true);
                    if (editedImage != null) {
                        Intent intent = new Intent();
                        intent.putExtra(ChooseActivity.BITMAP, editedImage);
                        // AddReportItemActivity.mPhoto =
                        // drawView.getDrawingCache();
                        setResult(SUCCESS, intent);
                        finish();
                    }
                }
            });
        }

        public void resetButtons() {
            btnText.setSelected(false);
            btnSketch.setSelected(false);
            btnColor.setSelected(false);
            btnUndo.setSelected(false);
            btnRedo.setSelected(false);
        }

        public class DrawingPanel extends ImageView implements OnTouchListener {
            Paint paint = new Paint();
            private Canvas mCanvas, c2;
            private Path mPath;
            private Paint mPaint, mBitmapPaint;
            private ArrayList<PathPoints> paths = new ArrayList<PathPoints>();
            private ArrayList<PathPoints> undonePaths = new ArrayList<PathPoints>();
            private Bitmap mBitmap, Transparent, Bitmap2;
            private int color;
            private int x, y;
            private boolean isTouched = false;
            public DrawingPanel(Context context, int color) {
                super(context);

                this.color = color;
                setFocusable(true);
                setFocusableInTouchMode(true);
                DisplayMetrics metrics = context.getResources().getDisplayMetrics();
                int width = metrics.widthPixels;
                int height = metrics.heightPixels;
                this.setOnTouchListener(this);
                Transparent = Bitmap.createBitmap(width, height,
                        Bitmap.Config.ARGB_8888);
                mBitmapPaint = new Paint(Paint.DITHER_FLAG);
                Bitmap2 = BitmapFactory.decodeResource(getResources(),
                        R.drawable.test);
            //  setBackgroundResource(R.drawable.test);
                mPaint = new Paint();
                mPaint.setAntiAlias(true);
                mPaint.setDither(true);
                mPaint.setColor(color);
                mPaint.setStyle(Paint.Style.STROKE);
                mPaint.setStrokeJoin(Paint.Join.ROUND);
                mPaint.setStrokeCap(Paint.Cap.ROUND);
                mPaint.setStrokeWidth(3);
                mPaint.setTextSize(30);
                c2 = new Canvas();
                c2.setBitmap(Transparent);
                // c2.drawBitmap(Bitmap1, 0, 0, null);
            //c2.drawBitmap(Bitmap2, 0, 0, mPaint);

            mPaint.setAlpha(0);
                // mPaint.setStyle(Style.FILL);
            mPaint.setXfermode(new PorterDuffXfermode(Mode.CLEAR));
            mPaint.setAntiAlias(true);
                mPath = new Path();
                paths.add(new PathPoints(mPath, color, false));
                mCanvas = new Canvas();
            }

            public void colorChanged(int color) {
                this.color = color;
                mPaint.setColor(color);
            }

            @Override
            protected void onSizeChanged(int w, int h, int oldw, int oldh) {
                super.onSizeChanged(w, h, oldw, oldh);
                // mBitmap = AddReportItemActivity.mPhoto;
                Drawable myDrawable = getResources().getDrawable(
                        R.drawable.ic_launcher);
                mBitmap = ((BitmapDrawable) myDrawable).getBitmap();
                Drawable myDrawable2 = getResources().getDrawable(
                        R.drawable.test);
                Bitmap2 = ((BitmapDrawable) myDrawable2).getBitmap();

                // mBitmap =
                // getIntent().getExtras().getParcelable(ChooseActivity.BITMAP);
                float xscale = (float) w / (float) mBitmap.getWidth();
                float yscale = (float) h / (float) mBitmap.getHeight();
                if (xscale > yscale) // make sure both dimensions fit (use the
                                        // smaller scale)
                    xscale = yscale;
                float newx = (float) w * xscale;
                float newy = (float) h * xscale; // use the same scale for both
                                                    // dimensions

                float xscale1 = (float) w / (float) Bitmap2.getWidth()-10;
                float yscale1 = (float) h / (float) Bitmap2.getHeight()-10;
                if (xscale1 > yscale1) // make sure both dimensions fit (use the
                                        // smaller scale)
                    xscale1 = yscale1;
                float newx1 = (float) w * xscale;
                float newy1 = (float) h * xscale; 
                // if you want it centered on the display (black borders)
                mBitmap = Bitmap.createScaledBitmap(mBitmap, this.getWidth(),
                        this.getHeight(), true);
                Bitmap2 = Bitmap.createScaledBitmap(Bitmap2, this.getWidth()-10,
                        this.getHeight()-10, true);
                // mCanvas = new Canvas(mBitmap);
            }

            @Override
            protected void onDraw(Canvas canvas) {
        canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
        c2.drawBitmap(Bitmap2, 0, 0, mBitmapPaint);
        canvas.drawBitmap(Transparent, 0, 0, null);
            //  c2.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
                for (PathPoints p : paths) {
                    mPaint.setColor(p.getColor());
                    Log.v("", "Color code : " + p.getColor());
                    if (p.isTextToDraw()) {
                        canvas.drawText(p.textToDraw, p.x, p.y, mPaint);
                    } else {
                        // if(isTouched)
                            //{ 
                        //   canvas.drawPath(p.getPath(), mPaint);
                                c2.drawPath(p.getPath(), mPaint);

                                //canvas.drawPath(p.getPath(),mPaint);
                            // canvas.drawBitmap(mBitmap, 0, 0, null);
                            // c2.drawPath(p.getPath(), mPaint);
                            // c2.drawCircle(X, Y, 50, mPaint);
                        //   canvas.drawBitmap(mBitmap, 0, 0, null);
                              //  canvas.drawBitmap(mBitmap, 0, 0, null);
                           // }
    //                      canvas.drawBitmap(Transparent, 0, 0, null);
                        //canvas.drawPath(p.getPath(), mPaint);
                    }

                }
            }

            private float mX, mY;
            private static final float TOUCH_TOLERANCE = 0;

            private void touch_start(float x, float y) {
                mPath.reset();
                mPath.moveTo(x, y);
                mX = x;
                mY = y;
            }

            private void touch_move(float x, float y) {
                float dx = Math.abs(x - mX);
                float dy = Math.abs(y - mY);
                if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {
                    mPath.quadTo(mX, mY, (x + mX) / 2, (y + mY) / 2);
                    mX = x;
                    mY = y;
                }
            }

            private void touch_up() {
                mPath.lineTo(mX, mY);
                // commit the path to our offscreen
                mCanvas.drawPath(mPath, mPaint);
                // kill this so we don't double draw
                mPath = new Path();
                paths.add(new PathPoints(mPath, color, false));

            }

            private void drawText(int x, int y) {
                Log.v(TAG, "Here");
                Log.v(TAG, "X " + x + " Y " + y);
                this.x = x;
                this.y = y;
                paths.add(new PathPoints(color, textToDraw, true, x, y));
                // mCanvas.drawText(textToDraw, x, y, mPaint);
            }

            @Override
            public boolean onTouch(View arg0, MotionEvent event) {
                isTouched=true;
                float x = event.getX();
                float y = event.getY();

                switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    if (!isTextModeOn) {
                        touch_start(x, y);
                        invalidate();
                    }
                    break;
                case MotionEvent.ACTION_MOVE:
                    if (!isTextModeOn) {
                        touch_move(x, y);
                        invalidate();
                    }
                    break;
                case MotionEvent.ACTION_UP:
                    if (isTextModeOn) {
                        drawText((int) x, (int) y);
                        invalidate();
                    } else {
                        touch_up();
                        invalidate();
                    }
                    break;
                }
                return true;
            }

            public void onClickUndo() {
                if (paths.size() > 0) {
                    undonePaths.add(paths.remove(paths.size() - 1));
                    invalidate();
                } else {

                }
                // toast the user
            }

            public void onClickRedo() {
                if (undonePaths.size() > 0) {
                    paths.add(undonePaths.remove(undonePaths.size() - 1));
                    invalidate();
                } else {

                }
                // toast the user
            }
        }

        /*
         * public class MyView extends View {
         * 
         * private static final float MINP = 0.25f; private static final float MAXP
         * = 0.75f;
         * 
         * private Bitmap mBitmap; private Canvas mCanvas; private Path mPath;
         * private Paint mBitmapPaint; private ArrayList<Path> undoablePaths;
         * 
         * public MyView(Context c) { super(c);
         * 
         * mPath = new Path(); mBitmapPaint = new Paint(Paint.DITHER_FLAG);
         * undoablePaths=new ArrayList<Path>(); }
         * 
         * 
         * @Override protected void onSizeChanged(int w, int h, int oldw, int oldh)
         * { super.onSizeChanged(w, h, oldw, oldh); mBitmap =
         * CaptureActivity.mPhoto; mCanvas = new Canvas(mBitmap); }
         * 
         * @Override protected void onDraw(Canvas canvas) {
         * canvas.drawColor(0xFFAAAAAA);
         * 
         * canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
         * 
         * canvas.drawPath(mPath, mPaint);
         * 
         * for(Path path : undoablePaths){ canvas.drawPath(path, mPaint); } }
         * 
         * private float mX, mY; private static final float TOUCH_TOLERANCE = 4;
         * 
         * private void touch_start(float x, float y) { mPath=new Path();
         * mPath.reset(); mPath.moveTo(x, y); mX = x; mY = y; } private void
         * touch_move(float x, float y) { float dx = Math.abs(x - mX); float dy =
         * Math.abs(y - mY); if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {
         * mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2); mX = x; mY = y; } } private
         * void touch_up() { mPath.lineTo(mX, mY); // commit the path to our
         * offscreen mCanvas.drawPath(mPath, mPaint); // Path tempPath=mPath;
         * undoablePaths.add(mPath); // kill this so we don't double draw
         * mPath.reset(); }
         * 
         * @Override public boolean onTouchEvent(MotionEvent event) { float x =
         * event.getX(); float y = event.getY();
         * 
         * switch (event.getAction()) { case MotionEvent.ACTION_DOWN: touch_start(x,
         * y); invalidate(); break; case MotionEvent.ACTION_MOVE: touch_move(x, y);
         * invalidate(); break; case MotionEvent.ACTION_UP: touch_up();
         * invalidate(); break; } return true; }
         * 
         * public void undoLastAction() { undoablePaths.remove(undoablePaths.size()
         * - 1); invalidate();
         * 
         * } }
         */

        public void colorChanged(int color) {
            // TODO Auto-generated method stub
            lastColor = color;
            drawView.colorChanged(lastColor);
        }

        class PathPoints {
            private Path path;
            // private Paint mPaint;
            private int color;
            private String textToDraw;
            private boolean isTextToDraw;
            private int x, y;

            public PathPoints(Path path, int color, boolean isTextToDraw) {
                this.path = path;
                this.color = color;
                this.isTextToDraw = isTextToDraw;
            }

            public PathPoints(int color, String textToDraw, boolean isTextToDraw,
                    int x, int y) {
                this.color = color;
                this.textToDraw = textToDraw;
                this.isTextToDraw = isTextToDraw;
                this.x = x;
                this.y = y;
            }

            public Path getPath() {
                return path;
            }

            public void setPath(Path path) {
                this.path = path;
            }

            /*
             * private Paint getPaint() { mPaint = new Paint();
             * mPaint.setAntiAlias(true); mPaint.setColor(color);
             * mPaint.setStyle(Paint.Style.STROKE);
             * mPaint.setStrokeJoin(Paint.Join.ROUND);
             * mPaint.setStrokeCap(Paint.Cap.ROUND); mPaint.setStrokeWidth(6);
             * return mPaint; }
             */

            public int getColor() {
                return color;
            }

            public void setColor(int color) {
                this.color = color;
            }

            public String getTextToDraw() {
                return textToDraw;
            }

            public void setTextToDraw(String textToDraw) {
                this.textToDraw = textToDraw;
            }

            public boolean isTextToDraw() {
                return isTextToDraw;
            }

            public void setTextToDraw(boolean isTextToDraw) {
                this.isTextToDraw = isTextToDraw;
            }

            public int getX() {
                return x;
            }

            public void setX(int x) {
                this.x = x;
            }

            public int getY() {
                return y;
            }

            public void setY(int y) {
                this.y = y;
            }

        }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 照片背景橡皮擦需要帮助 - 不擦除位图,而只是绘制黑线 的相关文章

  • 从队列更新活动的最佳方法

    我有一个LinkedBlockingQueue在我的 生产者 调解者 消费者 模型中的调解者中 Producer 首先更新将 Mediator 添加到 ActivityQueue 中 接下来 消费者 活动在队列中等待 侦听并获取下一个项目
  • Android 布局不需要的填充

    所以我有这个布局文件 如下 正如您所看到的 没有填充或边距 dimen xml 文件也没有任何填充 边距 最后 我根本不以编程方式更改布局
  • PHP服务器端IAB验证openssl_verify总是返回0

    我使用以下函数 服务器端 php 来验证 IAB v3 事务 我从 Android 应用程序传递过来 Override protected void onActivityResult int requestCode int resultCo
  • Android平台源码中哪里可以找到版本信息

    Android 平台源文件中的版本信息在哪里找到 我尝试查找 设置 gt gt 中列出的有关手机的一些信息 显示的一些信息包括固件版本 模块编号 基带版本 内核版本 你可以给它办理登机手续platform build core versio
  • IntentService、Service 或 AsyncTask

    实现这一点的最佳方法是什么 我有一个 Android 应用程序 它将使用我的 python 服务器来允许两部手机之间进行轮流通信 回合意味着他们在一轮开始之前不能互相交谈 一旦他们发送一条消息 他们就不能发送另一条消息 直到对方做出回应 然
  • 删除 json 对象字符串中的“\”

    如何删除下面字符串中的特殊字符 String x message content toom recipients id 1000001865 room subject room 我使用了 x replaceAll 但它不起作用 您必须转义正
  • Notification.Builder 中 setGroup() 的用途是什么?

    我对目标的理解有些困难setGroup http developer android com reference android app Notification Builder html setGroup java lang String
  • 如何更改对话框的默认黑色暗淡背景“颜色”(而不是暗淡量)?

    这是随机显示的图像Dialog在网上找到的 我一直在实施一个自定义Dialog 我可以处理对话框上的几乎所有内容 除了对话框本身下方的默认黑色昏暗背景之外 但在其后面的整个屏幕上 基本上我想改变它color和阿尔法值 我一直在 StackO
  • 如何找到特定路线上两点之间的距离?

    我正在为我的大学开发一个 Android 应用程序 可以帮助学生跟踪大学巴士的当前位置 并为他们提供巴士到达他们的预计时间 截至目前 我获取了公交车的当前位置 通过公交车上的设备 和学生的位置 我陷入了必须找到两个 GPS 坐标之间的距离的
  • 取消通知

    我使用Onesignal推送通知 需要取消所有onPause和onResume的通知 NotificationManager notificationManager NotificationManager getApplicationCon
  • popupBackground 与 Material Design 相关的问题

    我一直致力于将我的应用程序更新为 Material Design 我有一个使用选项卡的应用程序 由于某种原因 每当我使用 android popupBackground 设置下拉菜单颜色时 它就会崩溃 我设置了一个带有选项卡的默认项目并使用
  • 如何从webkit浏览器中检测Android版本和品牌?

    如何通过webkit浏览器检测Android版本和品牌 可靠吗 我相信你可以检查用户代理 但是 我认为它不安全 因为有很多方法可以用来欺骗用户代理 在谷歌上搜索这个问题给了我们很多答案 它甚至可以在默认浏览器上运行 您只需输入 about
  • 与 Dagger 一起使用时,Espresso 生成 FileNotFoundException

    我一直在研究旧版 Android 应用程序 尝试为其添加测试和适当的架构 该应用程序有一个主要LaunchActivity它在启动时运行一系列检查 最初 该活动使用 Dagger 来 注入依赖项 活动将使用它来运行检查 但效果相当糟糕 我转
  • 使用 Glide 库设置图像加载完成后进度条的可见性

    您好 我想要一个图像进度条 该进度条将在图像加载时显示 但当图像加载完成时 我想将其设置为消失 早些时候我为此使用了毕加索库 但我不知道如何将它与 Glide 库一起使用 我知道有一些资源就绪功能 但我不知道如何使用它 谁能帮我 毕加索图书
  • 在 Android ADT Eclipse 插件中滚动布局编辑器

    有谁知道当布局编辑器的内容溢出一个 屏幕 时如何滚动这些内容 我说的是在设计时使用 ADT 布局编辑器 而不是在物理设备上运行时滚动 效果很好 关闭 Android 布局编辑器中的剪辑 切换剪辑 按钮位于 Android 布局编辑器的右上角
  • 如何在 Android 中保存 Edittext 中的文本而不丢失文本的粗体、斜体等功能

    我想做的就是从 Edittext 中获取文本 该文本具有粗体和斜体等功能 并将其保存在文本文件中 但是当我读回并显示它时 这些功能丢失了 它们不显示 如何通过将文本保存在文本文件或任何文件中来保持丰富的功能 您可以使用Html toHtml
  • BadPaddingException:无效的密文

    我需要一些帮助 因为这是我第一次编写加密代码 加密代码似乎工作正常 但解密会引发错误 我得到的错误是 de flexiprovider api exceptions BadPaddingException 无效的密文 in the 解密函数
  • 当我使用 ListView 时,ListTile OnTap 正在工作。但是当我使用 ListWheelScrollView 时它不起作用

    当我使用 ListView 时 ListTile OnTap 正在工作 但是当我使用 ListWheelScrollView 时它不起作用 我的意思是它不会被窃听 观点发生变化 但我似乎无法点击它 我在很多地方和链接中寻找解决方案 但仍然找
  • compileReleaseKotlin 失败并出现 java.lang.ClassNotFoundException:com.sun.tools.javac.util.Context

    我正在尝试使用 gradlew 通过终端构建我的 Android 项目 其中包含库模块 在 Android Studio 中 它编译并安装成功 但是当我尝试运行时 gradlew assembleDebug我得到以下堆栈跟踪 Using k
  • 如何让用户在android列表视图中选择主题?

    我有一个带有两个标签的列表视图 标题和副标题 我想要深色和浅色背景作为用户选项 标题具有 textAppearanceMedium 副标题具有 textAppearanceSmall 我希望样式 MyTheme Dark 具有白色文本 My

随机推荐

  • 如何使用dotnetbrowser获取ajax请求响应正文?

    我已经浏览了 dotnetbrowser 网站上的文档 同时我看到了一个示例 展示了如何交叉 Ajax 调用或过滤 Ajax 调用 我想知道执行后是否可以获取 Ajax 请求正文响应 如果可能的话我该怎么做 是的 可以在 DotNetBro
  • 在 AWS lambda Node JS 的 http 响应标头中设置 Cookie

    我启用了 Lambda 代理集成 并将响应标头设置为 Lambda 输出和 API 网关的一部分 API 网关会将它们作为 HTTP 响应的一部分返回给客户端 示例代码 callback null statusCode 302 Locati
  • 如何形成独特的年、月、日的嵌套结构?

    我有一个日期数组 如下所示 2020 06 20T11 18 40 359Z 2020 06 15T11 17 45 511Z 2020 05 13T11 19 45 511Z 2019 04 20T11 49 27 828Z 我该怎么做才
  • Android Studio 3.3 xml 在 LinearLayout 上预览内部阴影

    我刚刚将 Android Studio 更新到版本 3 3 现在 在每个 XML 文件中 每个嵌套的 LinearLayout 的左侧和右侧都有一个内部阴影 如何将其去除 None
  • 如何使我的电子邮件代码适用于 PHP?

    嘿 此代码应该在未在电子邮件表单上输入输入时添加错误消息 并且应该在您最终输入代码时删除错误消息 我有两个使用以下代码 Generate a unique code function getUniqueCode length code md
  • AJAX 不更新部分视图

    我目前很难使用 Ajax 更新部分视图而无需刷新整个页面 我正在使用 MVC 和实体框架来构建视图 我将尝试尽可能多地包括在内以帮助解释自己 我有一个 div 将用于保存我所有评论的列表视图 div div 该 div 使用以下内容填充 S
  • Docker&Celery - 错误:Pidfile (celerybeat.pid) 已存在

    应用程序包括 姜戈 雷迪斯 芹菜 码头工人 Postgres 在将项目合并到 docker 之前 一切都运行顺利且正常 但是一旦将其移入容器 就开始出现问题 起初它开始得很好 但过了一会儿我确实收到了以下错误 celery beat 1 E
  • Spring Boot 的新遗迹

    最近 我们将一个 tomcat spring 应用程序转换为 spring boot 除了新遗物之外 一切都运行良好 有没有一种方法可以轻松地使用 Spring Boot 项目配置新的遗迹 我不想硬编码 new relic 代理 jar 路
  • 使用 VBA 确定进程 ID

    情况 我有一个宏 需要将击键按顺序发送到两个 Firefox 窗口 不幸的是 两个窗口具有相同的标题 为了处理这个问题 我激活了该窗口 发送了我的击键 然后使用 F6 加载第二个窗口的 URL 然后发送击键 然后使用 F6 将其返回到原始页
  • X86: `movsxd rdx,edx`指令是什么意思?

    我一直在玩intel mpx 发现它添加了某些我无法理解的指令 例如 英特尔格式 movsxd rdx edx I found this https stackoverflow com questions 33268906 how does
  • 为什么没有将 `std::initializer_list` 定义为文字类型?

    这是这个问题的后续 声明 constexprinitializer list 对象是否合法 https stackoverflow com questions 16063123 is it legal to declare a conste
  • Julia 泛型函数类型参数

    我定义了一个函数如下 function approx pi n tot Float64 0 0 for i in 1 n x rand y rand if x 2 y 2 lt 1 tot 1 end end tot n 4 end pri
  • 3D 哪个更快? Perlin 噪声还是 Simplex 噪声?

    好吧 网上有很多 Perlin 噪声和 Simplex 噪声之间的比较 但我真的找不到一个对三个维度进行简单处理时间比较的地方 这是我最感兴趣的 我读过那个流行的PDF http webstaff itn liu se stegu simp
  • DateTime 和 DateTime2 之间的区别[重复]

    这个问题在这里已经有答案了 可能的重复 SQL Server datetime2 与 datetime https stackoverflow com questions 1334143 sql server datetime2 vs da
  • 检查可选 Bool 的值

    当我想检查可选布尔值是否为真时 这样做不起作用 var boolean Bool false if boolean 它会导致此错误 可选类型 IvalueBool 不能用作布尔值 测试 nil 反而 我不想检查是否为零 我想检查返回的值是否
  • 如何使用 html5 canvas 将图像覆盖在杯子上

    我是 HTML5 画布新手 我有一个杯子的图像 我将其渲染在画布上 这是杯子的图片 现在我正在尝试渲染另一张图像 我的照片为正常矩形尺寸 上传该图像的设计区域 我怎样才能渲染这个看起来像杯子上的图像的图像 我想得到这样的最终图像 我使用ca
  • 使WCF服务可以通过Internet访问

    我做了一个WCF服务 我希望它的客户端能够从任何地方访问它 我怎样才能做到这一点 细节 我希望它托管在 Windows 中 过程 而不是站点 我正在使用 TCP 绑定 我对网络托管等几乎一无所知 最好不要使用 IIS 我在网上找到了很多建议
  • 为什么要向对象的属性添加单引号[重复]

    这个问题在这里已经有答案了 对于javascript对象 对于它的属性 我通常不会为其添加单引号 我记得如果我在对象的属性中添加单引号 它就会变成 JSON 吗 我对吗 请看这段代码 两个代码都会输出对象的值 请解释一下我是否需要向对象的属
  • 如何在 Spark 中读取和解析 BSON 转储文件?

    我在 HDFS 中有几个 BZ2 Mongo DB BSON 转储需要分析 我正在使用 Spark 2 0 1 和 Scala 2 11 8 目前我正在使用 Spark Shell 我尝试通过创建 RDD 来使用 mongo spark 连
  • Android 照片背景橡皮擦需要帮助 - 不擦除位图,而只是绘制黑线

    我正在开发 1 个应用程序 因为我需要删除位图 因为我所做的是 代码可以工作 但只是画黑线 Override protected void onDraw Canvas canvas canvas drawBitmap mBitmap 0 0