Android 倒影算法的实现代码

复制代码 代码如下:

public class MirrorView extends View {

 Paint m_paint;

 int m_nShadowH;

 Drawable m_dw;

 Bitmap m_bitmap;

 //xxxx

 Matrix mMatrix;

 int shadowHeight;

 public MirrorView(Context context, Bitmap bitmap) {

  super(context);

  m_bitmap = bitmap;

  _Init();

  // TODO Auto-generated constructor stub

 }

 private void _Init() {

  //m_dw = new BitmapDrawable(BitmapFactory.decodeResource(getResources(),  R.drawable.icon));

  m_dw = new BitmapDrawable(m_bitmap);

  m_dw.setBounds(0,0,m_dw.getIntrinsicWidth(),m_dw.getIntrinsicHeight());

  m_nShadowH = m_dw.getIntrinsicHeight()/1;

  m_paint = new Paint(Paint.ANTI_ALIAS_FLAG);

  LinearGradient lg = new LinearGradient(0, 0, 0, m_nShadowH, 0xB0FFFFFF, 0x00000000, Shader.TileMode.CLAMP);

  m_paint.setShader(lg);

  m_paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.MULTIPLY)); 

  //xxxx

  mMatrix = new Matrix();

 }

 @Override

 public void onDraw(Canvas canvas) {

  super.onDraw(canvas);

  int nX = 0;

  int nY = 0;

  _DrawNormalImg(canvas, nX, nY);

  _DrawMirror(canvas, nX, nY);

 }

 private void _DrawNormalImg(Canvas canvas, int nX, int nY) {

  canvas.save(Canvas.MATRIX_SAVE_FLAG);

  canvas.translate(nX, nY);

  m_dw.draw(canvas);

  canvas.restore();

 }

 private void _DrawMirror(Canvas canvas, int nX, int nY) {

  int nW = m_dw.getIntrinsicWidth();

  int nH = m_dw.getIntrinsicHeight();

//  U.dout("nW="+nW+",nH="+nH);

  //xxxx

  shadowHeight=nH/2;

  //xxxx

  float[] src={0, nH, nW, nH, nW,nH - m_nShadowH, 0, nH - m_nShadowH};

  float[] dst={ 0, nH, nW, nH,nW, shadowHeight, 0, shadowHeight };

  //xxxx

  canvas.save();

  mMatrix.setPolyToPoly(src, 0, dst, 0, src.length >> 1);

  canvas.concat(mMatrix);

  //draw mirror image 

  canvas.save(Canvas.MATRIX_SAVE_FLAG);

  canvas.scale(1.0f, -1.0f);

  canvas.translate(nX, -(nY + nH * 2));

  canvas.clipRect(0, nH, nW, nH - m_nShadowH);

  m_dw.draw(canvas);

  canvas.restore();

  //draw mask 

  canvas.save();

  canvas.translate(nX, nY + nH);

  canvas.drawRect(0, 0, nW, m_nShadowH, m_paint);

  canvas.restore();

  //xxxx

  canvas.restore();

 }

}

时间: 2024-10-01 14:24:07

Android 倒影算法的实现代码的相关文章

Android 倒影算法的实现代码_Android

复制代码 代码如下: public class MirrorView extends View { Paint m_paint; int m_nShadowH; Drawable m_dw; Bitmap m_bitmap; //xxxx Matrix mMatrix; int shadowHeight; public MirrorView(Context context, Bitmap bitmap) {  super(context);  m_bitmap = bitmap;  _Init(

C++火车入轨算法的实现代码

 这篇文章主要介绍了C++火车入轨算法的实现代码,有需要的朋友可以参考一下 [问题描述]   某城市有一个火车站,铁轨铺设如图所示.有n节车厢从A方向驶入车站,按进站顺序编号为1~n.你的任务是让它们按照某种特定的顺序进入B方向的铁轨并驶出车站.为了重组车厢,你可以借助中转站C.这是一个可以停放任意多节车厢的车站,但由于末端封顶,驶入C的车厢必须按照相反的顺序驶出.对于每个车厢,一旦从A移入C,就不能再回到A了:一旦从C移入B,就不能回到C了.换句话说,在任意时刻,只有两种选择:A→C和C→B.

python冒泡排序算法的实现代码_python

1.算法描述:(1)共循环 n-1 次(2)每次循环中,如果 前面的数大于后面的数,就交换(3)设置一个标签,如果上次没有交换,就说明这个是已经好了的. 2.python冒泡排序代码 复制代码 代码如下: #!/usr/bin/python# -*- coding: utf-8 -*- def bubble(l):    flag = True    for i in range(len(l)-1, 0, -1):        if flag:             flag = False

python选择排序算法的实现代码_python

1.算法:对于一组关键字{K1,K2,-,Kn}, 首先从K1,K2,-,Kn中选择最小值,假如它是 Kz,则将Kz与 K1对换:然后从K2,K3,- ,Kn中选择最小值 Kz,再将Kz与K2对换.如此进行选择和调换n-2趟,第(n-1)趟,从Kn-1.Kn中选择最小值 Kz将Kz与Kn-1对换,最后剩下的就是该序列中的最大值,一个由小到大的有序序列就这样形成. 2.python 选择排序代码: 复制代码 代码如下: def selection_sort(list2):    for i in

python插入排序算法的实现代码_python

1.算法:设有一组关键字{ K 1 , K 2 ,-, K n }:排序开始就认为 K 1 是一个有序序列:让 K 2 插入上述表长为 1 的有序序列,使之成为一个表长为 2 的有序序列:然后让 K 3 插入上述表长为 2 的有序序列,使之成为一个表长为 3 的有序序列:依次类推,最后让 K n 插入上述表长为 n-1 的有序序列,得一个表长为 n 的有序序列. 2.python插入排序代码 复制代码 代码如下: def insertion_sort(list2):    for i in ra

C++火车入轨算法的实现代码_C 语言

[问题描述] 某城市有一个火车站,铁轨铺设如图所示.有n节车厢从A方向驶入车站,按进站顺序编号为1~n.你的任务是让它们按照某种特定的顺序进入B方向的铁轨并驶出车站.为了重组车厢,你可以借助中转站C.这是一个可以停放任意多节车厢的车站,但由于末端封顶,驶入C的车厢必须按照相反的顺序驶出.对于每个车厢,一旦从A移入C,就不能再回到A了:一旦从C移入B,就不能回到C了.换句话说,在任意时刻,只有两种选择:A→C和C→B. 这个问题和之前数据结构实验的火车入轨类似,而且较之简化.自己尝试写了下,和书上

js跑步算法的实现代码_javascript技巧

先复制一下,看看运行的效果吧,其中用到的精髓是setInterval()方法: 复制代码 代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html><head><title>JavaScript</title><style>html{backgroun

PHP 冒泡排序算法的实现代码_php技巧

复制代码 代码如下: $arr = array(345,4,17,6,52,16,58,69,32,8,234); for($i=1;$i<count($arr);$i++){ for($j=count($arr)-1;$j>=$i;$j--){ if($arr[$j]<$arr[$j-1]){ $temp = $arr[$j-1]; $arr[$j-1] = $arr[$j]; $arr[$j] = $temp; } } } 基本概念 冒泡排序的基本概念是:依次比较相邻的两个数,将小数

求助!!聚类算法的实现与分析

问题描述 求助!!聚类算法的实现与分析 请问拿成绩作为分析对象,用分级聚类算法怎么实现,请教下主要的思路.希望能给个具体点的实例,谢谢! 解决方案 一个K-means聚类算法的实现代码和分析