سؤال

أحتاج إلى مساعدة في صنع المساحات التي تم لمسها من صورة صورة نقطية شفافة (تبدو مثل المحو) أثناء تحريك إصبعي على تلك الصورة.

لدي ملف PNG مع قناة Alpha فيه. أرغب في تحويل البكسلات التي تم لمسها إلى شفافة بحيث يمكن للمستخدم أن يشعر أنه يقوم بالفعل بمحوها.

لهذا أنا أستخدم تخطيط الإطار لتحميل طبقتين. الطبقة السفلية مخصصة للمحتوى والطبقة العليا هي صورة محو للمحو. أحتاج إلى محو الطبقة العليا عند لمس المستخدم ونقل إصبعه عليه.

أنا لا أحصل على كيفية جعلها شفافة. هل يمكن لأي شخص مساعدتي في هذا. إذا أمكن ، يرجى توجيهني إلى أي رمز عينة ، لأنني جديد جدًا على معالجة الصور هذه.

شكرا لك مقدما.

هل كانت مفيدة؟

المحلول

تحتاج إلى تعيين وضع PorterDuff على كائن الطلاء:

mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC)) 

وارسم مع Color.TRANSPARENT

انظر أيضًا هذا الموضوع في مجموعة مطوري Android:http://groups.google.com/group/android-developers/browse_thread/thread/5b0a498664b17aa0/de4aab6fb7e97e38؟lnk=gst&q=erase+transparent#

نصائح أخرى

يحتوي ImageView على طريقة setalpha التي تأخذ عددًا صحيحًا بين 0 و 255. لا أعرف ما هو شفاف وأي شهرة ولكن لا ينبغي أن يستغرق وقتًا طويلاً للمحاولة: P

إنه يعمل لكنه لم يرسم المسار.

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BlurMaskFilter.Blur;
import android.graphics.BitmapFactory;
import android.graphics.BlurMaskFilter;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;

public class StartActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(new TouchView(this));


}

class TouchView extends View{
    Bitmap bgr;
    Bitmap overlayDefault;
    Bitmap overlay;
    Paint pTouch;
    int X = -100;
    int Y = -100;
    Canvas c2;

    public TouchView(Context context) {
        super(context);

        bgr = BitmapFactory.decodeResource(getResources(),R.drawable.bgr);
        overlayDefault = BitmapFactory.decodeResource(getResources(),R.drawable.over);
        overlay = BitmapFactory.decodeResource(getResources(),R.drawable.over).copy(Config.ARGB_8888, true);  
        c2 = new Canvas(overlay);

        pTouch = new Paint(Paint.ANTI_ALIAS_FLAG);         
        pTouch.setXfermode(new PorterDuffXfermode(Mode.SRC_OUT)); 
        pTouch.setColor(Color.TRANSPARENT);
        pTouch.setMaskFilter(new BlurMaskFilter(15, Blur.NORMAL));


    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {

        switch (ev.getAction()) {

            case MotionEvent.ACTION_DOWN: {

                X = (int) ev.getX();
                Y = (int) ev.getY();
                invalidate();

                break;
            }

            case MotionEvent.ACTION_MOVE: {

                    X = (int) ev.getX();
                    Y = (int) ev.getY();
                    invalidate();
                    break;

            }           

            case MotionEvent.ACTION_UP:

                break;

        }
        return true;
    }


    @Override
    public void onDraw(Canvas canvas){
        super.onDraw(canvas);

        //draw background
        canvas.drawBitmap(bgr, 0, 0, null);
        //copy the default overlay into temporary overlay and punch a hole in it                          
        c2.drawBitmap(overlayDefault, 0, 0, null); //exclude this line to show all as you draw
        c2.drawCircle(X, Y, 80, pTouch);
        //draw the overlay over the background  
        canvas.drawBitmap(overlay, 0, 0, null);

    }


}


}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top