• Android实现图片倒影效果


    直接上代码

    package com.turlet.shadow;
    
    import android.app.Activity;
    import android.os.Bundle;
    
    public class MainActivity extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(new ImageShadowView(this));
        }
    }
    package com.turlet.shadow;
    
    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.Bitmap.Config;
    import android.graphics.BitmapFactory;
    import android.graphics.Canvas;
    import android.graphics.LinearGradient;
    import android.graphics.Matrix;
    import android.graphics.Paint;
    import android.graphics.PorterDuff.Mode;
    import android.graphics.PorterDuffXfermode;
    import android.graphics.Shader.TileMode;
    import android.view.SurfaceHolder;
    import android.view.SurfaceView;
    /**
     * 
     * @author turlet
     *
     */
    public class ImageShadowView extends SurfaceView implements SurfaceHolder.Callback{
    
        private Bitmap mBitmap;
        
        public ImageShadowView(Context context) {
            super(context);
            // TODO Auto-generated constructor stub
            SurfaceHolder holder = this.getHolder();
            holder.addCallback(this);
            mBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.xiaochuan);
        }
    
        @Override
        protected void onDraw(Canvas canvas) {
            // TODO Auto-generated method stub
            super.onDraw(canvas);
            int width = mBitmap.getWidth();
            int height = mBitmap.getHeight();
            canvas.drawBitmap(mBitmap, 0, 0, null);
            
            Bitmap nBitmap = setShadow(mBitmap);
            nBitmap = setAlpha(nBitmap,50);//一半透明
            canvas.drawBitmap(nBitmap, 0, height+2, null);
            
        }
    
        @Override
        public void surfaceCreated(SurfaceHolder holder) {
            // TODO Auto-generated method stub
            Canvas canvas = holder.lockCanvas();
            this.onDraw(canvas);
            holder.unlockCanvasAndPost(canvas);
        }
    
        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width,
                int height) {
            // TODO Auto-generated method stub
            
        }
    
        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
            // TODO Auto-generated method stub
            
        }
        /**
         * 
         * @param sourceImg 传入的图片
         * @param number 0-100(0为完全透明,100为不透明)
         * @return Bitmap 处理后的图片
         */
        public static Bitmap setAlpha(Bitmap sourceImg, int number) {   
             int[] argb = new int[sourceImg.getWidth() * sourceImg.getHeight()];   
             sourceImg.getPixels(argb, 0, sourceImg.getWidth(), 0, 0,sourceImg.getWidth(), sourceImg.getHeight());   
             number = number * 255 / 100;   
             double round = (double)number/(double)(argb.length);
             System.out.println(round+ "  l="+argb.length +" n="+number);
             for (int i = 0; i < argb.length; i++) {   
              if(number-i*round>10){
                  argb[i] = ((int)(number-i*round) << 24) | (argb[i] & 0x00FFFFFF);
                  continue;
              }
              else{
                  argb[i] = (10 << 24) | (argb[i] & 0x00FFFFFF);
                  continue;
              }
    
             }   
             sourceImg = Bitmap.createBitmap(argb, sourceImg.getWidth(), sourceImg.getHeight(), Config.ARGB_8888);   
                
             return sourceImg;   
           }   
        /**
         * 传入一张图片,经倒转后,再取一半
         * @param bitmap
         * @return
         */
        public static Bitmap setShadow(Bitmap bitmap){
            int width = bitmap.getWidth();
            int height = bitmap.getHeight();
            Matrix matrix = new Matrix();
            matrix.preScale(1, -1);
            Bitmap shadowImage = Bitmap.createBitmap(bitmap, 0, height / 2,
                    width, height / 2, matrix, false);
            return shadowImage;
        }
    
    }

     效果图:

  • 相关阅读:
    1052: 最大报销额
    1036: 小希的数表
    1050: 找出直系亲属
    1048: 导弹防御系统
    1051: 魔咒词典
    以大数据眼光欣赏唐人文墨(一)
    Java 内部类详解
    那些“不务正业”的IT培训公司
    Brackets 前端编辑器试用
    Emmet 快速编写html代码
  • 原文地址:https://www.cnblogs.com/jh5240/p/2464795.html
Copyright © 2020-2023  润新知