//using System; //using Android.Content; //using Android.Graphics; //using Android.Graphics.Drawables; //using Android.OS; //using Android.Util; //using Android.Views; //namespace Shared //{ // //已经全面检查了代码 // /// // /// Button 按键 // /// // public class ImageView : View // { // /// // /// 当前视图 // /// // /// The android button. // AndroidImageView currentButton // { // get // { // return AndroidView as AndroidImageView; // } // set // { // AndroidView = value; // } // } // /// // /// 构造函数 // /// // public ImageView() // { // currentButton = new AndroidImageView(Application.Activity, this); // } // internal string imagePath,tempImagePath; // /// // /// 非选中状态的背景图路径 // /// // /// The un selected image path. // public string ImagePath // { // get // { // return imagePath; // } // set // { // tempImagePath = value; // if(!IsCanRefresh){ // return; // } // if (imageBytes != null) // { // (AndroidView as AndroidImageView).SetImageDrawable(Bytes2Drawable(imageBytes)); // return; // } // if (ImagePath == value) { // return; // } // imagePath=value; // Background(value); // } // } // byte[] imageBytes; // public byte[] ImageBytes // { // get // { // return imageBytes; // } // set // { // imageBytes = value; // ImagePath = tempImagePath; // } // } // public override uint Radius // { // get // { // return base.Radius; // } // set // { // base.Radius = value; // if (!IsCanRefresh && Radius == value) // { // return; // } // currentButton.Invalidate(); // } // } // public override void Refresh() // { // base.Refresh(); // ImagePath = tempImagePath; // } // } // public class AndroidImageView : Android.Widget.ImageView // { // public override bool OnTouchEvent(MotionEvent e) // { // base.OnTouchEvent(e); // if (view != null) // { // view.TouchEvent(e); // } // return true; // } // private Xfermode mXfermode = new PorterDuffXfermode(PorterDuff.Mode.DstIn); // private Bitmap mMaskBitmap; // private WeakReference mWeakBitmap; // /** // * 图片的类型,圆形or圆角 // */ // private int type=TYPE_ROUND; // public static int TYPE_CIRCLE = 0; // public static int TYPE_ROUND = 1; // /** // * 圆角大小的默认值 // */ // private static int BODER_RADIUS_DEFAULT = 10; // /** // * 绘图的Paint // */ // private Paint mBitmapPaint; // /** // * 圆角的半径 // */ // private int mRadius; // ///** // // * 3x3 矩阵,主要用于缩小放大 // // */ // //private Matrix mMatrix; // ///** // // * 渲染图像,使用图像为绘制图形着色 // // */ // //private BitmapShader mBitmapShader; // ///** // // * view的宽度 // // */ // private int mWidth; // //private RectF mRoundRect; // View view; // public AndroidImageView(Context context, View view) // : base(context) // { // this.view = view; // mBitmapPaint = new Paint(); // mBitmapPaint.AntiAlias = true; // } // protected override void OnMeasure(int widthMeasureSpec, int heightMeasureSpec) // { // base.OnMeasure(widthMeasureSpec, heightMeasureSpec); // ///** // // * 如果类型是圆形,则强制改变view的宽高一致,以小值为准 // // */ // if (type == TYPE_CIRCLE) // { // mWidth = Math.Min(MeasuredWidth, MeasuredHeight); // mRadius = mWidth / 2; // SetMeasuredDimension(mWidth, mWidth); // } // } // protected override void OnDraw(Canvas canvas) // { // // 在缓存中取出bitmap // Bitmap bitmap = null; // if (mWeakBitmap != null) // { // mWeakBitmap.TryGetTarget(out bitmap); // } // if (null == bitmap || bitmap.IsRecycled) // { // // Drawable drawable = this.Drawable; // // if (drawable == null) // // { // // return; // // } // // Bitmap bmp = drawableToBitamp(drawable); // // if (bmp == null) // // { // // return; // // } // // 拿到Drawable // Drawable drawable = this.Drawable; // if (drawable == null) // { // return; // } // // 获取drawable的宽和高 // int dWidth = drawable.IntrinsicWidth; // int dHeight = drawable.IntrinsicHeight; // if (drawable != null) // { // // 创建bitmap // bitmap = Bitmap.CreateBitmap(this.Width, this.Height, // Bitmap.Config.Argb8888); // float scale = 1.0f; // // 创建画布 // Canvas drawCanvas = new Canvas(bitmap); // // 按照bitmap的宽高,以及view的宽高,计算缩放比例;因为设置的src宽高比例可能和imageview的宽高比例不同,这里我们不希望图片失真; // if (type == TYPE_ROUND) // { // // 如果图片的宽或者高与view的宽高不匹配,计算出需要缩放的比例;缩放后的图片的宽高,一定要大于我们view的宽高;所以我们这里取大值; // scale = Math.Max(this.Width * 1.0f / dWidth, this.Height // * 1.0f / dHeight); // } // else // { // scale = this.Width * 1.0F / Math.Min(dWidth, dHeight); // } // // 根据缩放比例,设置bounds,相当于缩放图片了 // drawable.SetBounds(0, 0, (int)(scale * dWidth), // (int)(scale * dHeight)); // drawable.Draw(drawCanvas); // if (mMaskBitmap == null || mMaskBitmap.IsRecycled) // { // mMaskBitmap = getBitmap(); // } // // Draw Bitmap. // mBitmapPaint.Reset(); // mBitmapPaint.FilterBitmap = false; // mBitmapPaint.SetXfermode(mXfermode); // // 绘制形状 // drawCanvas.DrawBitmap(mMaskBitmap, 0, 0, mBitmapPaint); // mBitmapPaint.SetXfermode(null); // // 将准备好的bitmap绘制出来 // canvas.DrawBitmap(bitmap, 0, 0, null); // // bitmap缓存起来,避免每次调用onDraw,分配内存 // mWeakBitmap = new WeakReference(bitmap); // } // } // // 如果bitmap还存在,则直接绘制即可 // if (bitmap != null) // { // mBitmapPaint.SetXfermode(null); // canvas.DrawBitmap(bitmap, 0.0f, 0.0f, mBitmapPaint); // return; // } // } // /** // * drawable转bitmap // * // * @param drawable // * @return // */ // private Bitmap drawableToBitamp(Drawable drawable) // { // if (drawable.GetType() == typeof(BitmapDrawable)) // { // BitmapDrawable bd = (BitmapDrawable)drawable; // return bd.Bitmap; // } // int w = drawable.IntrinsicWidth; // int h = drawable.IntrinsicHeight; // if (w <= 0 || h <= 0) // { // return null; // } // Bitmap bitmap = Bitmap.CreateBitmap(w, h, Bitmap.Config.Argb8888); // Canvas canvas = new Canvas(bitmap); // drawable.SetBounds(0, 0, w, h); // drawable.Draw(canvas); // return bitmap; // } // public override void Invalidate() // { // mWeakBitmap = null; // if (mMaskBitmap != null) // { // mMaskBitmap.Recycle(); // mMaskBitmap = null; // } // base.Invalidate(); // } // /** // * 绘制形状 // * // * @return // */ // public Bitmap getBitmap() // { // Bitmap bitmap = Bitmap.CreateBitmap(this.Width, this.Height, // Bitmap.Config.Argb8888); // Canvas canvas = new Canvas(bitmap); // Paint paint = new Paint(PaintFlags.AntiAlias); // paint.Color = Android.Graphics.Color.Black; // if (type == TYPE_ROUND) // { // RectF mRoundRect = new RectF(0, 0, this.Width, this.Height); // //canvas.DrawRoundRect(new RectF(0, 0, this.Width, this.Height), // // mRadius, mRadius, paint); // if (!view.IsSetAloneRadius) // { // canvas.DrawRoundRect(mRoundRect, view.Radius, view.Radius, // mBitmapPaint); // } // else // { // canvas.DrawRoundRect(mRoundRect, view.mAloneRadius, view.mAloneRadius, // mBitmapPaint); // if ((view.mRadiusId & 1) == 0) // { // canvas.DrawRect(0, 0, view.mAloneRadius, view.mAloneRadius, mBitmapPaint); // } // if ((view.mRadiusId >> 1 & 1) == 0) // { // canvas.DrawRect(mRoundRect.Right - view.mAloneRadius, 0, mRoundRect.Right, view.mAloneRadius, mBitmapPaint); // } // if ((view.mRadiusId >> 2 & 1) == 0) // { // canvas.DrawRect(0, mRoundRect.Bottom - view.mAloneRadius, view.mAloneRadius, mRoundRect.Bottom, mBitmapPaint); // } // if ((view.mRadiusId >> 3 & 1) == 0) // { // canvas.DrawRect(mRoundRect.Right - view.mAloneRadius, mRoundRect.Bottom - view.mAloneRadius, mRoundRect.Right, mRoundRect.Bottom, mBitmapPaint); // } // } // } // else // { // canvas.DrawCircle(this.Width / 2, this.Width / 2, this.Width / 2, // paint); // } // return bitmap; // } // public int dp2px(int dpVal) // { // return (int)TypedValue.ApplyDimension(ComplexUnitType.Dip, // dpVal, Resources.DisplayMetrics); // } // } //}