当前位置: 首页 > news >正文

php网站后台密码忘记了网站如何建立数据库

php网站后台密码忘记了,网站如何建立数据库,阳光创信-网站建设首选品牌,wordpress农业模板转载请标明出处#xff1a;http://blog.csdn.net/lmj623565791/article/details/41967509#xff0c;本文出自#xff1a;【张鸿洋的博客】 1、概述 记得初学那会写过一篇博客Android 完美实现图片圆角和圆形#xff08;对实现进行分析#xff09;#xff0c;主要是个自定… 转载请标明出处http://blog.csdn.net/lmj623565791/article/details/41967509本文出自【张鸿洋的博客】 1、概述 记得初学那会写过一篇博客Android 完美实现图片圆角和圆形对实现进行分析主要是个自定View加上使用Xfermode实现的。其实实现圆角图片的方法应该很多常见的就是利用XfermodeShader。本篇博客会直接继承直接继承ImageView使用BitmapShader实现圆角的绘制大家如果耐着性子看完我估计什么形状都能绘制出来。 2、效果图 这是圆角的一个演示图~~这个没什么说的直接设置的圆角的大小就行     这是圆形的显示图这里需要注意下因为设置的图片可能是长方形例如上图有两个长方形一个宽比较大一个高比较大 那么我们希望显示成圆形我们可能就要对其进行放大或者缩小因为图片的宽可能不满足设置的边长而高超出此时我们就需要放大其宽度。     这个一张图中间是正常尺寸上下分别为特大特小主要可以当尺寸大于或者小于设置尺寸我们需要对其放大或者缩小 圆角时如果图片与view的宽高不一致也需要进行放大缩小这里就不截图了代码里面看吧。 3、浅谈BitmapShader BitmapShader是Shader的子类可以通过Paint.setShaderShader shader进行设置、 这里我们只关注BitmapShader构造方法 mBitmapShader new BitmapShader(bitmap, TileMode.CLAMP, TileMode.CLAMP); 参数1bitmap 参数2参数3TileMode TileMode的取值有三种 CLAMP 拉伸 REPEAT 重复 MIRROR 镜像 如果大家给电脑屏幕设置屏保的时候如果图片太小可以选择重复、拉伸、镜像 重复就是横向、纵向不断重复这个bitmap 镜像横向不断翻转重复纵向不断翻转重复 拉伸这个和电脑屏保的模式应该有些不同这个拉伸的是图片最后的那一个像素横向的最后一个横行像素不断的重复纵项的那一列像素不断的重复 现在大概明白了BitmapShader通过设置给mPaint然后用这个mPaint绘图时就会根据你设置的TileMode对绘制区域进行着色。 这里需要注意一点就是BitmapShader是从你的画布的左上角开始绘制的不在view的右下角绘制个正方形它不会在你正方形的左上角开始。 好了到此我相信大家对BitmapShader有了一定的了解了当然了如果你希望对Shader充分的了解请参考爱歌的神作 自定义控件其实很简单1/3 。 对于我们的圆角以及圆形我们设置的模式都是CLAMP 但是你会不会会有一个疑问 view的宽或者高大于我们的bitmap宽或者高岂不是会拉伸 嗯我们会为BitmapShader设置一个matrix去适当的放大或者缩小图片不会让“ view的宽或者高大于我们的bitmap宽或者高 ”此条件成立的。 到此我们的原理基本介绍完毕了拿到drawable转化为bitmap然后直接初始化BitmapShader画笔设置Shader最后在onDraw里面进行画圆就行了。 4、BitmapShader实战 首先就来看看利用BitmapShader实现的圆形或者圆角。 我们这里直接继承ImageView这样大家设置图片的代码会比较熟悉但是我们需要支持两种模式那么就需要自定义属性了 1、自定义属性 values/attr.xml [html] view plaincopy ?xml version1.0 encodingutf-8?  resources        attr nameborderRadius formatdimension /      attr nametype          enum namecircle value0 /          enum nameround value1 /      /attr            declare-styleable nameRoundImageView          attr nameborderRadius /          attr nametype /      /declare-styleable    /resources   我们定义了一个枚举和一个圆角的大小borderRadius。 2、获取自定义属性 [java] view plaincopy public class RoundImageView extends ImageView  {        /**      * 图片的类型圆形or圆角      */      private int type;      private static final int TYPE_CIRCLE  0;      private static final int TYPE_ROUND  1;        /**      * 圆角大小的默认值      */      private static final int BODER_RADIUS_DEFAULT  10;      /**      * 圆角的大小      */      private int mBorderRadius;        /**      * 绘图的Paint      */      private Paint mBitmapPaint;      /**      * 圆角的半径      */      private int mRadius;      /**      * 3x3 矩阵主要用于缩小放大      */      private Matrix mMatrix;      /**      * 渲染图像使用图像为绘制图形着色      */      private BitmapShader mBitmapShader;      /**      * view的宽度      */      private int mWidth;      private RectF mRoundRect;        public RoundImageView(Context context, AttributeSet attrs)      {          super(context, attrs);          mMatrix  new Matrix();          mBitmapPaint  new Paint();          mBitmapPaint.setAntiAlias(true);            TypedArray a  context.obtainStyledAttributes(attrs,                  R.styleable.RoundImageView);            mBorderRadius  a.getDimensionPixelSize(                  R.styleable.RoundImageView_borderRadius, (int) TypedValue                          .applyDimension(TypedValue.COMPLEX_UNIT_DIP,                                  BODER_RADIUS_DEFAULT, getResources()                                          .getDisplayMetrics()));// 默认为10dp          type  a.getInt(R.styleable.RoundImageView_type, TYPE_CIRCLE);// 默认为Circle            a.recycle();      }     可以看到我们的一些成员变量基本都加了注释然后在构造方法中获取了我们的自定义属性以及部分变量的初始化。   3、onMeasure [java] view plaincopy Override      protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)      {          Log.e(TAG, onMeasure);          super.onMeasure(widthMeasureSpec, heightMeasureSpec);            /**          * 如果类型是圆形则强制改变view的宽高一致以小值为准          */          if (type  TYPE_CIRCLE)          {              mWidth  Math.min(getMeasuredWidth(), getMeasuredHeight());              mRadius  mWidth / 2;              setMeasuredDimension(mWidth, mWidth);          }        }   我们复写了onMeasure方法主要用于当设置类型为圆形时我们强制让view的宽和高一致。 接下来只剩下设置BitmapShader和绘制了   4、设置BitmapShader [java] view plaincopy /**      * 初始化BitmapShader      */      private void setUpShader()      {          Drawable drawable  getDrawable();          if (drawable  null)          {              return;          }            Bitmap bmp  drawableToBitamp(drawable);          // 将bmp作为着色器就是在指定区域内绘制bmp          mBitmapShader  new BitmapShader(bmp, TileMode.CLAMP, TileMode.CLAMP);          float scale  1.0f;          if (type  TYPE_CIRCLE)          {              // 拿到bitmap宽或高的小值              int bSize  Math.min(bmp.getWidth(), bmp.getHeight());              scale  mWidth * 1.0f / bSize;            } else if (type  TYPE_ROUND)          {              // 如果图片的宽或者高与view的宽高不匹配计算出需要缩放的比例缩放后的图片的宽高一定要大于我们view的宽高所以我们这里取大值              scale  Math.max(getWidth() * 1.0f / bmp.getWidth(), getHeight()                      * 1.0f / bmp.getHeight());          }          // shader的变换矩阵我们这里主要用于放大或者缩小          mMatrix.setScale(scale, scale);          // 设置变换矩阵          mBitmapShader.setLocalMatrix(mMatrix);          // 设置shader          mBitmapPaint.setShader(mBitmapShader);      }   在setUpShader中首先对drawable转化为我们的bitmap; 然后初始化mBitmapShader new BitmapShader(bmp, TileMode.CLAMP, TileMode.CLAMP); 接下来根据类型以及bitmap和view的宽高计算scale 关于scale的计算 圆形时取bitmap的宽或者高的小值作为基准如果采用大值缩放后肯定不能填满我们的圆形区域。然后view的mWidth/bSize ; 得到的就是scale。 圆角时因为设计到宽/高比例我们分别getWidth() * 1.0f / bmp.getWidth() 和 getHeight() * 1.0f / bmp.getHeight() 最终取大值因为我们要让最终缩放完成的图片一定要大于我们的view的区域有点类似centerCrop 比如view的宽高为10*20图片的宽高为5*100 最终我们应该按照宽的比例放大而不是按照高的比例缩小因为我们需要让缩放后的图片自定大于我们的view宽高并保证原图比例。 有了scale就可以设置给我们的matrix 然后使用mBitmapShader.setLocalMatrix(mMatrix); 最后将bitmapShader设置给paint。 关于drawable转bitmap的代码 [java] view plaincopy /**      * drawable转bitmap      *       * param drawable      * return      */      private Bitmap drawableToBitamp(Drawable drawable)      {          if (drawable instanceof BitmapDrawable)          {              BitmapDrawable bd  (BitmapDrawable) drawable;              return bd.getBitmap();          }          int w  drawable.getIntrinsicWidth();          int h  drawable.getIntrinsicHeight();          Bitmap bitmap  Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);          Canvas canvas  new Canvas(bitmap);          drawable.setBounds(0, 0, w, h);          drawable.draw(canvas);          return bitmap;      }   最后我们会在onDraw里面调用setUpShader然后进行绘制。 5、绘制 到此就剩下最后一步绘制了因为我们的范围以及缩放都完成了所以真的只剩下绘制了。 [java] view plaincopy Override      protected void onDraw(Canvas canvas)      {          if (getDrawable()  null)          {              return;          }          setUpShader();            if (type  TYPE_ROUND)          {              canvas.drawRoundRect(mRoundRect, mBorderRadius, mBorderRadius,                      mBitmapPaint);          } else          {              canvas.drawCircle(mRadius, mRadius, mRadius, mBitmapPaint);              // drawSomeThing(canvas);          }      }            Override      protected void onSizeChanged(int w, int h, int oldw, int oldh)      {          super.onSizeChanged(w, h, oldw, oldh);          // 圆角图片的范围          if (type  TYPE_ROUND)              mRoundRect  new RectF(0, 0, getWidth(), getHeight());      }   绘制就很简单了画个圆圆角矩形什么的。圆角矩形的限定范围mRoundRect在onSizeChanged里面进行了初始化。 5、状态的存储与恢复 当然了如果内存不足而恰好我们的Activity置于后台不幸被重启或者用户旋转屏幕造成Activity重启我们的View应该也能尽可能的去保存自己的属性。 状态保存什么用处呢比如现在一个的圆角大小是10dp用户点击后变成50dp当用户旋转以后或者长时间置于后台以后返回我们的Activity应该还是50dp 我们简单的存储一下当前的type以及mBorderRadius [java] view plaincopy private static final String STATE_INSTANCE  state_instance;      private static final String STATE_TYPE  state_type;      private static final String STATE_BORDER_RADIUS  state_border_radius;        Override      protected Parcelable onSaveInstanceState()      {          Bundle bundle  new Bundle();          bundle.putParcelable(STATE_INSTANCE, super.onSaveInstanceState());          bundle.putInt(STATE_TYPE, type);          bundle.putInt(STATE_BORDER_RADIUS, mBorderRadius);          return bundle;      }        Override      protected void onRestoreInstanceState(Parcelable state)      {          if (state instanceof Bundle)          {              Bundle bundle  (Bundle) state;              super.onRestoreInstanceState(((Bundle) state)                      .getParcelable(STATE_INSTANCE));              this.type  bundle.getInt(STATE_TYPE);              this.mBorderRadius  bundle.getInt(STATE_BORDER_RADIUS);          } else          {              super.onRestoreInstanceState(state);          }        }   代码比较简单。我们文章中的demo中第一个第四个是可以点击的点击后会发生变化你可以点击后然后旋转屏幕进行测试。 同时我们也对外公布了两个方法用于动态修改圆角大小和type [java] view plaincopy public void setBorderRadius(int borderRadius)      {          int pxVal  dp2px(borderRadius);          if (this.mBorderRadius ! pxVal)          {              this.mBorderRadius  pxVal;              invalidate();          }      }        public void setType(int type)      {          if (this.type ! type)          {              this.type  type;              if (this.type ! TYPE_ROUND  this.type ! TYPE_CIRCLE)              {                  this.type  TYPE_CIRCLE;              }              requestLayout();          }        }        public int dp2px(int dpVal)      {          return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,                  dpVal, getResources().getDisplayMetrics());      }   最后贴一下我们的布局文件和MainActivity。 6、调用 布局文件: [html] view plaincopy ScrollView xmlns:androidhttp://schemas.android.com/apk/res/android      xmlns:toolshttp://schemas.android.com/tools      xmlns:zhyhttp://schemas.android.com/apk/res/com.zhy.variousshapeimageview      android:layout_widthmatch_parent      android:layout_heightwrap_content         LinearLayout          android:layout_widthmatch_parent          android:layout_heightmatch_parent          android:orientationvertical             com.zhy.view.RoundImageView              android:idid/id_qiqiu              android:layout_widthwrap_content              android:layout_heightwrap_content              android:layout_margin10dp              android:srcdrawable/qiqiu           /com.zhy.view.RoundImageView            com.zhy.view.RoundImageView              android:layout_width200dp              android:layout_height200dp              android:layout_margin10dp              android:srcdrawable/aa           /com.zhy.view.RoundImageView            com.zhy.view.RoundImageView              android:layout_widthwrap_content              android:layout_heightwrap_content              android:layout_margin10dp              android:srcdrawable/icon           /com.zhy.view.RoundImageView            com.zhy.view.RoundImageView              android:idid/id_meinv              android:layout_widthwrap_content              android:layout_heightwrap_content              android:layout_margin10dp              android:srcdrawable/aa              zhy:borderRadius20dp              zhy:typeround           /com.zhy.view.RoundImageView            com.zhy.view.RoundImageView              android:layout_widthwrap_content              android:layout_heightwrap_content              android:layout_margin10dp              android:srcdrawable/icon              zhy:borderRadius40dp              zhy:typeround           /com.zhy.view.RoundImageView            com.zhy.view.RoundImageView              android:layout_widthwrap_content              android:layout_heightwrap_content              android:layout_margin10dp              android:srcdrawable/qiqiu              zhy:borderRadius60dp              zhy:typeround           /com.zhy.view.RoundImageView      /LinearLayout    /ScrollView   没撒ScrollView里面一个线性布局里面一堆RoundImageView。 MainActivity [java] view plaincopy package com.zhy.variousshapeimageview;    import android.app.Activity;  import android.os.Bundle;  import android.view.View;  import android.view.View.OnClickListener;    import com.zhy.view.RoundImageView;    public class MainActivity extends Activity  {      private RoundImageView mQiQiu;      private RoundImageView mMeiNv ;         Override      protected void onCreate(Bundle savedInstanceState)      {          super.onCreate(savedInstanceState);          setContentView(R.layout.activity_main);                    mQiQiu  (RoundImageView) findViewById(R.id.id_qiqiu);          mMeiNv  (RoundImageView) findViewById(R.id.id_meinv);                    mQiQiu.setOnClickListener(new OnClickListener()          {              Override              public void onClick(View v)              {                  mQiQiu.setType(RoundImageView.TYPE_ROUND);              }          });                    mMeiNv.setOnClickListener(new OnClickListener()          {                            Override              public void onClick(View v)              {                  mMeiNv.setBorderRadius(90);              }          });      }    }   好了到此本篇博客就结束了。大家可以尝试绘制个五边形或者神马的形状或者加个边框神马的相信自己修改应该没问题~~代码可能会存在bug和不足之处欢迎您的指出共同进步。   最后的效果图     源码点击下载 转载于:https://www.cnblogs.com/Free-Thinker/p/6721468.html
http://www.yutouwan.com/news/162043/

相关文章:

  • 网站建设实习目的门户网站的建设与维护
  • 高端网站哪个比较好北京市信息网
  • 公司网站制作有哪些注意事项百度软文推广怎样收费
  • 做网站都有跳转链接如何在百度做网站推广
  • 做网站好还是网页好如何成为网页设计师
  • wordpress增加产品模块魔方优化大师官网
  • 品牌建站创立一个公司需要多少钱
  • 集团企业网站建设方案中企动力近期做的网站
  • 哪个网站做logo设计师项目管理师pmp报考条件
  • 专做眼镜的网站工邦邦官网
  • 如何学做网站外包贵州seo和网络推广
  • 最新网站域名通辽做家教的网站
  • 如何做简洁网站手机网站定制方案
  • 毕业设计 建设网站新冠最新消息实时动态
  • 90设计网站官网首页网站建设的费用明细
  • 用wordpress做答题网站做网站市场分析
  • 个人免费网站申请注册php网站开发
  • 银川网站设计怎么样百度推广渠道户
  • 网站地图后缀wordpress 后台列表
  • 手机软件开发平台网页seo如何优化
  • 查一下红之易道学做的什么网站上海浦东建筑建设网站污水处理工程
  • 门户网站底部小程序商城系统平台
  • 辛集网站建设精能集团有限公司两学一做网站
  • 郑州网站制作服务半成品网站
  • 网站策划与建设阶段的推广方法做销售如何在网站上搜集资料
  • 网站建设对电子商务的作用wordpress域名搬家
  • 安阳市城乡建设规划局网站郑州网站建设定制开发
  • 医程通 网站做的太平台运营
  • 电子商务公司网站建立短视频seo优化排名
  • phpcms手机网站网页设计实例