在Android上按钮点击页面卷曲事件

时间:2016-01-18 17:59:28

标签: android android-layout page-curl

我举了一个例子并根据我的要求对其进行了修改。这是页面卷曲的例子。触摸它工作正常。但现在我希望它能够处理按钮点击,同样意味着屏幕触摸和按钮点击会产生相同的卷曲效果。

我有一个PageCurlView.java类,它是独立的类。我试图在我的主类SecondActivity.java中创建静态内部类,这样我就可以使用内部类的功能在外部类的按钮上执行click事件。但这里再没有运气。

我正在粘贴我的代码。请帮我配合这两件事。 谢谢!!

SecondActivity.java

package com.pg.spirituallawsthataffectourlife;

public class SecondActivity extends Activity {

    private InterstitialAd mInterstitialAd;
    private Button _mute_Btn, _back_Btn, _frwrd_Btn;
    public PageCurlView _view;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //Remove title bar
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        setContentView(R.layout.second);

        _mute_Btn = (Button) findViewById(R.id.sound_btn);
        _mute_Btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Constants.isMute = !Constants.isMute;

                if(Constants.isMute){
                    _mute_Btn.setBackgroundResource(R.drawable.mute);
                }else{
                    _mute_Btn.setBackgroundResource(R.drawable.unmute);
                }

            }
        });


        _back_Btn = (Button) findViewById(R.id.left_arrow_btn);
        _back_Btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

            }
        });

        _frwrd_Btn = (Button) findViewById(R.id.right_arrow_btn);
        _frwrd_Btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

            }
        });

        //_view = new PageCurlView(this);
        //_view.init(this);

        AdView mAdView = (AdView) findViewById(R.id.adView);
        AdRequest adRequest = new AdRequest.Builder().build();
        mAdView.loadAd(adRequest);

    }

    private void requestNewInterstitial() {
        AdRequest adRequest = new AdRequest.Builder()
        //.addTestDevice("B2696BE76A1396E0A24920EFAD192319")
        .build();

        mInterstitialAd.loadAd(adRequest);
    }


    @Override
    public void onDestroy(){
        super.onDestroy();
        System.gc();
        finish();
    }


    public void lockOrientationLandscape() {
        lockOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    }


    public void lockOrientationPortrait() {
        lockOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }

    public void lockOrientation( int orientation ) {
        setRequestedOrientation(orientation);
    }   
}

Second.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:id="@+id/ad_layout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <com.google.android.gms.ads.AdView
            android:id="@+id/adView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="left"
            ads:adSize="BANNER"
            ads:adUnitId="@string/banner_ad_test_unit_id" >
        </com.google.android.gms.ads.AdView>

        <Button
            android:id="@+id/sound_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="right"
            android:background="@drawable/unmute" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/bottom_layout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@color/black"
        android:orientation="vertical" >

        <com.pg.spirituallawsthataffectourlife.PageCurlView
            android:id="@+id/dcgpagecurlPageCurlView1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/page1" />

        <LinearLayout
            android:id="@+id/btn_layout"
            android:layout_width="fill_parent"
            android:layout_height="90dp"
            android:background="@color/black"
            android:orientation="horizontal" >

            <Button
                android:id="@+id/left_arrow_btn"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/backk" />

            <Button
                android:id="@+id/right_arrow_btn"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/nextt" />
        </LinearLayout>
    </LinearLayout>

</LinearLayout>

PageCurlView.java

公共类PageCurlView扩展了View {

        private final static String TAG = "PageCurlView";
        public final int CURLMODE_SIMPLE = 0;
    public final int CURLMODE_DYNAMIC = 1;
       private class Vector2D
        {
            public float x,y;
            public Vector2D(float x, float y)
            {
                this.x = x;
                this.y = y;
            }

            @Override
            public String toString() {
                    return "("+this.x+","+this.y+")";
            }

            public float length() {
                return (float) Math.sqrt(x * x + y * y);
            }

            public float lengthSquared() {
                return (x * x) + (y * y);
            }

            public boolean equals(Object o) {
                if (o instanceof Vector2D) {
                    Vector2D p = (Vector2D) o;
                    return p.x == x && p.y == y;
                }
                return false;
            }

            public Vector2D reverse() {
                return new Vector2D(-x,-y);
            }

            public Vector2D sum(Vector2D b) {
                return new Vector2D(x+b.x,y+b.y);
            }

            public Vector2D sub(Vector2D b) {
                return new Vector2D(x-b.x,y-b.y);
            }       

            public float dot(Vector2D vec) {
                return (x * vec.x) + (y * vec.y);
            }

            public float cross(Vector2D a, Vector2D b) {
                return a.cross(b);
            }

            public float cross(Vector2D vec) {
                return x * vec.y - y * vec.x;
            }

            public float distanceSquared(Vector2D other) {
                float dx = other.x - x;
                float dy = other.y - y;

                return (dx * dx) + (dy * dy);
            }

            public float distance(Vector2D other) {
                return (float) Math.sqrt(distanceSquared(other));
            }

            public float dotProduct(Vector2D other) {
                return other.x * x + other.y * y;
            }

            public Vector2D normalize() {
                float magnitude = (float) Math.sqrt(dotProduct(this));
                return new Vector2D(x / magnitude, y / magnitude);
            }

            public Vector2D mult(float scalar) {
                return new Vector2D(x*scalar,y*scalar);
            }
        }


     class FlipAnimationHandler extends Handler {
            @Override
            public void handleMessage(Message msg) {
                FlipAnimationStep();
            }

            public void sleep(long millis) {
                this.removeMessages(0);
                sendMessageDelayed(obtainMessage(0), millis);
            }
        }

        public PageCurlView(Context context) {
            super(context);
            this._cContext = context;

            init(context);

            ResetClipEdge();
        }

        public PageCurlView(Context context, AttributeSet attrs) {
            super(context, attrs);
            this._cContext = context;

            init(context);

                {
                TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.PageCurlView);

                // Get data
                bEnableDebugMode = a.getBoolean(R.styleable.PageCurlView_enableDebugMode, bEnableDebugMode);
                mCurlSpeed = a.getInt(R.styleable.PageCurlView_curlSpeed, mCurlSpeed);
                mUpdateRate = a.getInt(R.styleable.PageCurlView_updateRate, mUpdateRate);
                mInitialEdgeOffset = a.getInt(R.styleable.PageCurlView_initialEdgeOffset, mInitialEdgeOffset);
                mCurlMode = a.getInt(R.styleable.PageCurlView_curlMode, mCurlMode);

                mCurlSpeed+=30;
                mUpdateRate+=30;

                    a.recycle();
            }

            ResetClipEdge();
        }


        private final void init(Context context) {
            // Foreground text paint
            mTextPaint = new Paint();
            mTextPaint.setAntiAlias(true);
            mTextPaint.setTextSize(16);
            mTextPaint.setColor(Color.BLACK);//(0xFF000000);

            // The shadow
            mTextPaintShadow = new TextPaint();
            mTextPaintShadow.setAntiAlias(true);
            mTextPaintShadow.setTextSize(16);
            mTextPaintShadow.setColor(0x00000000);

            // Cache the context
            mContext = new WeakReference<Context>(context);

            // Base padding
            setPadding(3, 3, 3, 3);

            int width = Resources.getSystem().getDisplayMetrics().widthPixels;
            int height =Resources.getSystem().getDisplayMetrics().heightPixels; 
            height-=140;
            setMeasuredDimension(width, height);

            // The focus flags are needed
            setFocusable(true);
            setFocusableInTouchMode(true);

            mMovement =  new Vector2D(0,0);
            mFinger = new Vector2D(0,0);
            mOldMovement = new Vector2D(0,0);

            // Create our curl animation handler
            mAnimationHandler = new FlipAnimationHandler();

            // Create our edge paint
            mCurlEdgePaint = new Paint();
            mCurlEdgePaint.setColor(Color.GRAY);
            mCurlEdgePaint.setAntiAlias(true);
            mCurlEdgePaint.setStyle(Paint.Style.FILL);
            mCurlEdgePaint.setShadowLayer(10, -5, 5, 0x99000000);

            // Set the default props, those come from an XML :D
            mCurlSpeed = 30;
            mUpdateRate = 33;
            mInitialEdgeOffset = 20;
            mCurlMode = 1;

mPages = new ArrayList<Bitmap>();
            mPages.add(BitmapFactory.decodeResource(getResources(), R.drawable.splash));
            mPages.add(BitmapFactory.decodeResource(getResources(), R.drawable.pic_1));
            mPages.add(BitmapFactory.decodeResource(getResources(), R.drawable.pic_2));
            mPages.add(BitmapFactory.decodeResource(getResources(), R.drawable.pic_3));


            // Create some sample images
            mForeground = mPages.get(0);
            mBackground = mPages.get(1);

            invalidate();
        }

    public void ResetClipEdge()
        {
            mMovement.x = mInitialEdgeOffset;
            mMovement.y = mInitialEdgeOffset;       
            mOldMovement.x = 0;
            mOldMovement.y = 0;     

            mA = new Vector2D(mInitialEdgeOffset, 0);
            mB = new Vector2D(this.getWidth(), this.getHeight());
            mC = new Vector2D(this.getWidth(), 0);
            mD = new Vector2D(0, 0);
            mE = new Vector2D(0, 0);
            mF = new Vector2D(0, 0);        
            mOldF = new Vector2D(0, 0);

            // The movement origin point
            mOrigin = new Vector2D(this.getWidth(), 0);

            invalidate();
        }


        private Context GetContext() {
            return mContext.get();
        }

        public boolean IsCurlModeDynamic()
        {
            return mCurlMode == CURLMODE_DYNAMIC;
        }
        public void SetCurlSpeed(int curlSpeed)
        {
            if ( curlSpeed < 1 )
                throw new IllegalArgumentException("curlSpeed must be greated than 0");
            mCurlSpeed = curlSpeed;
        }


        public int GetCurlSpeed()
        {
            return mCurlSpeed;
        }

        public void SetUpdateRate(int updateRate)
        {
            if ( updateRate < 1 )
                throw new IllegalArgumentException("updateRate must be greated than 0");
            mUpdateRate = updateRate;
        }


        public int GetUpdateRate()
        {
            return mUpdateRate;
        }


        public void SetInitialEdgeOffset(int initialEdgeOffset)
        {
            if ( initialEdgeOffset < 0 )
                throw new IllegalArgumentException("initialEdgeOffset can not negative");
            mInitialEdgeOffset = initialEdgeOffset;
        }


        public int GetInitialEdgeOffset(){
            return mInitialEdgeOffset;
        }

        public void SetCurlMode(int curlMode)
        {
            if ( curlMode != CURLMODE_SIMPLE &&
                    curlMode != CURLMODE_DYNAMIC )
                throw new IllegalArgumentException("Invalid curlMode");
            mCurlMode = curlMode;
        }


        public int GetCurlMode()
        {
            return mCurlMode;
        }


        public void SetEnableDebugMode(boolean bFlag)
        {
            bEnableDebugMode = bFlag;
        }


        public boolean IsDebugModeEnabled()
        {
            return bEnableDebugMode;
        }


        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            int finalWidth, finalHeight;
            finalWidth = measureWidth(widthMeasureSpec);
            finalHeight = measureHeight(heightMeasureSpec);

            finalHeight-=90;
            setMeasuredDimension(finalWidth, finalHeight);
        }

        private int measureWidth(int measureSpec) {
            int result = 0;
            int specMode = MeasureSpec.getMode(measureSpec);
            int specSize = MeasureSpec.getSize(measureSpec);

            if (specMode == MeasureSpec.EXACTLY) {
                    result = specSize;
            } else {
                result = specSize;
            }

            return result;
        }


        private int measureHeight(int measureSpec) {
            int result = 0;
            int specMode = MeasureSpec.getMode(measureSpec);
            int specSize = MeasureSpec.getSize(measureSpec);

            if (specMode == MeasureSpec.EXACTLY) {
                    result = specSize;
            } else {
                result = specSize;
            }
            return result;
        }

        @Override
        public boolean onTouchEvent(MotionEvent event) {
            if (!bBlockTouchInput) {
    mFinger.x = event.getX();
                mFinger.y = event.getY();
                int width = getWidth();
            switch (event.getAction()) {

                case MotionEvent.ACTION_DOWN:               
                    mOldMovement.x = mFinger.x;
                    mOldMovement.y = mFinger.y;

                        if (mOldMovement.x > (width >> 1)) {
                        mMovement.x = mInitialEdgeOffset;
                        mMovement.y = mInitialEdgeOffset;

                        bFlipRight = true;
                    } else {
                        // Set the left movement flag
                        bFlipRight = false;

                            previousView();

                                mMovement.x = IsCurlModeDynamic()?width<<1:width;
                        mMovement.y = mInitialEdgeOffset;
                    }

                    break;
                case MotionEvent.ACTION_UP:             
                    bUserMoves=false;
                    bFlipping=true;
                    FlipAnimationStep();
                    break;
                case MotionEvent.ACTION_MOVE:
                    bUserMoves=true;

                        mMovement.x -= mFinger.x - mOldMovement.x;
                    mMovement.y -= mFinger.y - mOldMovement.y;
                    mMovement = CapMovement(mMovement, true);
        if ( mMovement.y  <= 1 )
                        mMovement.y = 1;

                        if (mFinger.x < mOldMovement.x ) {
                        bFlipRight = true;
                    } else {
                        bFlipRight = false;
                    }

                        mOldMovement.x  = mFinger.x;
                    mOldMovement.y  = mFinger.y;

                        DoPageCurl();
                    this.invalidate();
                    break;
                }
            }
                    return true;
        }

        public void doIt(){
            if (!bBlockTouchInput) 
                int width = getWidth();
    switch (111) {

                case 111:               
                    mOldMovement.x = mFinger.x;
                    mOldMovement.y = mFinger.y;

                    // If we moved over the half of the display flip to next
                    if (mOldMovement.x > (width >> 1)) {
                        mMovement.x = mInitialEdgeOffset;
                        mMovement.y = mInitialEdgeOffset;

                        // Set the right movement flag
                        bFlipRight = true;
                    } else {
                        // Set the left movement flag
                        bFlipRight = false;

                        // go to next previous page
                        previousView();

                        // Set new movement
                        mMovement.x = IsCurlModeDynamic()?width<<1:width;
                        mMovement.y = mInitialEdgeOffset;
                    }

                    break;
                case 222:               
                    bUserMoves=false;
                    bFlipping=true;
                    FlipAnimationStep();

                    if(!Constants.isMute)
                        playMusic();//play sound


                    break;
                case MotionEvent.ACTION_MOVE:
                    bUserMoves=true;

                    // Get movement
                    mMovement.x -= mFinger.x - mOldMovement.x;
                    mMovement.y -= mFinger.y - mOldMovement.y;
                    mMovement = CapMovement(mMovement, true);

                    // Make sure the y value get's locked at a nice level
                    if ( mMovement.y  <= 1 )
                        mMovement.y = 1;

                        if (mFinger.x < mOldMovement.x ) {
                        bFlipRight = true;
                    } else {
                        bFlipRight = false;
                    }

                        mOldMovement.x  = mFinger.x;
                    mOldMovement.y  = mFinger.y;

                        DoPageCurl();
                    this.invalidate();
                    break;
                }

            }

        }

        private Vector2D CapMovement(Vector2D point, boolean bMaintainMoveDir)
        {
            if (point.distance(mOrigin) > mFlipRadius)
            {
                if ( bMaintainMoveDir )
                {
                        point = mOrigin.sum(point.sub(mOrigin).normalize().mult(mFlipRadius));
                }
                else
                {
                    // Change direction
                    if ( point.x > (mOrigin.x+mFlipRadius))
                        point.x = (mOrigin.x+mFlipRadius);
                    else if ( point.x < (mOrigin.x-mFlipRadius) )
                        point.x = (mOrigin.x-mFlipRadius);
                    point.y = (float) (Math.sin(Math.acos(Math.abs(point.x-mOrigin.x)/mFlipRadius))*mFlipRadius);
                }
            }
            return point;
        }

            public void FlipAnimationStep() {
            if ( !bFlipping )
                return;

            int width = getWidth();
            bBlockTouchInput = true;
    float curlSpeed = mCurlSpeed;
            if ( !bFlipRight )
                curlSpeed *= -1;

                mMovement.x += curlSpeed;
            mMovement = CapMovement(mMovement, false);

            DoPageCurl();

            if (mA.x < 1 || mA.x > width - 1) {
                bFlipping = false;
                if (bFlipRight) {
                    //SwapViews();
                    nextView();
                } 
                ResetClipEdge();

                DoPageCurl();

                bEnableInputAfterDraw = true;
            }
            else
            {
                mAnimationHandler.sleep(mUpdateRate);
            }

            this.invalidate();
        }

        public void DoPageCurl()
        {
            if(bFlipping){
                if ( IsCurlModeDynamic() )
                    doDynamicCurl();
                else
                    doSimpleCurl();

            } else {
                if ( IsCurlModeDynamic() )
                    doDynamicCurl();
                else
                    doSimpleCurl();
            }
        }


        private void doSimpleCurl() {
            int width = getWidth();
            int height = getHeight();

            // Calculate point A
            mA.x = width - mMovement.x;
            mA.y = height;

            // Calculate point D
            mD.x = 0;
            mD.y = 0;
            if (mA.x > width / 2) {
                mD.x = width;
                mD.y = height - (width - mA.x) * height / mA.x;
            } else {
                mD.x = 2 * mA.x;
                mD.y = 0;
            }
        double angle = Math.atan((height - mD.y) / (mD.x + mMovement.x - width));
            double _cos = Math.cos(2 * angle);
            double _sin = Math.sin(2 * angle);

            // And get F
            mF.x = (float) (width - mMovement.x + _cos * mMovement.x);
            mF.y = (float) (height - _sin * mMovement.x);

            // If the x position of A is above half of the page we are still not
            // folding the upper-right edge and so E and D are equal.
            if (mA.x > width / 2) {
                mE.x = mD.x;
                mE.y = mD.y;
            }
            else
            {
                // So get E
                mE.x = (float) (mD.x + _cos * (width - mD.x));
                mE.y = (float) -(_sin * (width - mD.x));
            }
        }

        private void doDynamicCurl() {
            int width = getWidth();
            int height = getHeight();

            // F will follow the finger, we add a small displacement
            // So that we can see the edge
            mF.x = width - mMovement.x+0.1f;
            mF.y = height - mMovement.y+0.1f;

            // Set min points
            if(mA.x==0) {
                mF.x= Math.min(mF.x, mOldF.x);
                mF.y= Math.max(mF.y, mOldF.y);
            }

            // Get diffs
            float deltaX = width-mF.x;
            float deltaY = height-mF.y;

            float BH = (float) (Math.sqrt(deltaX * deltaX + deltaY * deltaY) / 2);
            double tangAlpha = deltaY / deltaX;
            double alpha = Math.atan(deltaY / deltaX);
            double _cos = Math.cos(alpha);
            double _sin = Math.sin(alpha);

            mA.x = (float) (width - (BH / _cos));
            mA.y = height;

            mD.y = (float) (height - (BH / _sin));
            mD.x = width;

            mA.x = Math.max(0,mA.x);
            if(mA.x==0) {
                mOldF.x = mF.x;
                mOldF.y = mF.y;
            }

            // Get W
            mE.x = mD.x;
            mE.y = mD.y;

            // Correct
            if (mD.y < 0) {
                mD.x = width + (float) (tangAlpha * mD.y);
                mE.y = 0;
                mE.x = width + (float) (Math.tan(2 * alpha) * mD.y);
            }
        }


        @Deprecated
        private void SwapViews() {
            Bitmap temp = mForeground;
            mForeground = mBackground;
            mBackground = temp;
        }


        private void nextView() {
            int foreIndex = mIndex + 1;

            if(foreIndex==5){

                if(mInterstitialAd.isLoaded())
                    mInterstitialAd.show();
            }
            if(foreIndex >= mPages.size()) {
                foreIndex = 0;
            }
            int backIndex = foreIndex + 1;
            if(backIndex >= mPages.size()) {
                backIndex = 0;
            }
            mIndex = foreIndex;
            setViews(foreIndex, backIndex);
        }


        private void previousView() {
            int backIndex = mIndex;
            int foreIndex = backIndex - 1;
            if(foreIndex < 0) {
                foreIndex = mPages.size()-1;
            }
            mIndex = foreIndex;
            setViews(foreIndex, backIndex);
        }


        private void setViews(int foreground, int background) {
            mForeground = mPages.get(foreground);
            mBackground = mPages.get(background);
        }


        @Override
        protected void onDraw(Canvas canvas) {
            // Always refresh offsets
            mCurrentLeft = getLeft();
            mCurrentTop = getTop();

            if ( !bViewDrawn ) {
                bViewDrawn = true;
                onFirstDrawEvent(canvas);
            }

            canvas.drawColor(Color.WHITE);


            Rect rect = new Rect();
            rect.left = 0;
            rect.top = 0;
            rect.bottom = getHeight();
            rect.right = getWidth();

            // First Page render
            Paint paint = new Paint();

            // Draw our elements
            drawForeground(canvas, rect, paint);
            drawBackground(canvas, rect, paint);
            drawCurlEdge(canvas);

            // Draw any debug info once we are done
            if ( bEnableDebugMode )
                drawDebug(canvas);

            // Check if we can re-enable input
            if ( bEnableInputAfterDraw )
            {
                bBlockTouchInput = false;
                bEnableInputAfterDraw = false;
            }


        }

        protected void onFirstDrawEvent(Canvas canvas) {

            mFlipRadius = getWidth();

            ResetClipEdge();
            DoPageCurl();
        }


        private void drawForeground( Canvas canvas, Rect rect, Paint paint ) {
            canvas.drawBitmap(mForeground, null, rect, paint);

            // Draw the page number (first page is 1 in real life :D 
            // there is no page number 0 hehe)
            drawPageNum(canvas, mIndex);
        }


        private Path createBackgroundPath() {
            Path path = new Path();
            path.moveTo(mA.x, mA.y);
            path.lineTo(mB.x, mB.y);
            path.lineTo(mC.x, mC.y);
            path.lineTo(mD.x, mD.y);
            path.lineTo(mA.x, mA.y);
            return path;
        }


        private void drawBackground( Canvas canvas, Rect rect, Paint paint ) {
            Path mask = createBackgroundPath();

            // Save current canvas so we do not mess it up
            canvas.save();
            canvas.clipPath(mask);
            canvas.drawBitmap(mBackground, null, rect, paint);

            // Draw the page number (first page is 1 in real life :D 
            // there is no page number 0 hehe)
            drawPageNum(canvas, mIndex);

            canvas.restore();
        }


        private Path createCurlEdgePath() {
            Path path = new Path();
            path.moveTo(mA.x, mA.y);
            path.lineTo(mD.x, mD.y);
            path.lineTo(mE.x, mE.y);
            path.lineTo(mF.x, mF.y);
            path.lineTo(mA.x, mA.y);
            return path;
        }


        private void drawCurlEdge( Canvas canvas )
        {
            Path path = createCurlEdgePath();
            canvas.drawPath(path, mCurlEdgePaint);
        }


        private void drawPageNum(Canvas canvas, int pageNum)
        {
            mTextPaint.setColor(Color.BLACK);
            String pageNumText = "- "+pageNum+" -";
            drawCentered(canvas, pageNumText,canvas.getHeight()-mTextPaint.getTextSize()-5,mTextPaint,mTextPaintShadow);
        }


        public void drawTextShadowed(Canvas canvas, String text, float x, float y, Paint textPain, Paint shadowPaint) {
            canvas.drawText(text, x-1, y, shadowPaint);
            canvas.drawText(text, x, y+1, shadowPaint);
            canvas.drawText(text, x+1, y, shadowPaint);
            canvas.drawText(text, x, y-1, shadowPaint);     
            canvas.drawText(text, x, y, textPain);
        }


    }*

0 个答案:

没有答案