Android图片倒影的例子

效果图



public class MainActivity extends Activity
{
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(new ImageShadowView(this));
	}
}

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;
	}

	//传入一张图片,经倒转后,再取一半
	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;
	}

}

A<wbr>n<wbr>d<wbr>r<wbr>o<wbr>i<wbr>d<wbr><wbr>M<wbr>a<wbr>t<wbr>r<wbr>i<wbr>x<wbr>基<wbr>础<wbr>+<wbr>详<wbr>解</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

http://wenku.baidu.com/view/96590cd076a20029bd642ddf.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值