Android 倒影算法的实现代码

2016-02-19 09:37 5 1 收藏

每个人都希望每天都是开心的,不要因为一些琐事扰乱了心情还,闲暇的时间怎么打发,关注图老师可以让你学习更多的好东西,下面为大家推荐Android 倒影算法的实现代码,赶紧看过来吧!

【 tulaoshi.com - 编程语言 】

代码如下:

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

来源:http://www.tulaoshi.com/n/20160219/1591484.html

延伸阅读
在做多语言版本的时候,日期时间的格式话是一个很头疼的事情,幸好Android提供了DateFormate,可以根据指定的语言区域的默认格式来格式化。 直接贴代码: 代码如下: public static CharSequence formatTimeInListForOverSeaUser( final Context context, final long time, final boolean simple, Locale locale) { final GregorianCale...
代码如下: StringBuilder phoneInfo = new StringBuilder(); phoneInfo.append("Product: " + android.os.Build.PRODUCT + System.getProperty("line.separator")); phoneInfo.append( "CPU_ABI: " + android.os.Build.CPU_ABI + System.getProperty("line.separator")); phoneInfo.append( "TAGS: " + android.os.Build.TAGS + System.ge...
代码如下: // 隐藏输入法 InputMethodManager imm = (InputMethodManager) getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE); // 显示或者隐藏输入法 imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); toggleSoftInput 这个方法可以转换软件输入法在窗体中的显示状态。如果输入法当前是显示状...
实现手机电话状态的监听,主要依靠两个类:TelephoneManger和PhoneStateListener。 TelephonseManger提供了取得手机基本服务的信息的一种方式。因此应用程序可以使用TelephonyManager来探测手机基本服务的情况。应用程序可以注册listener来监听电话状态的改变。我们不能对TelephonyManager进行实例化,只能通过获取服务的形式: Context.getSy...
标签: Web开发
代码如下: 1.  script language="javascript"  !--  location.replace("www.goldtimes.net");  --/script  2.  meta http-equiv="refresh" content="0;url=http://www.goldtimes.net"   3.  script language="javascript"  !--  self.location="";&nbs...

经验教程

864

收藏

38
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部