示例#1
0
		public override void draw(android.graphics.Canvas canvas)
		{
			if (((int)(((uint)mState.mUseColor) >> 24)) != 0)
			{
				mPaint.setColor(mState.mUseColor);
				canvas.drawRect(getBounds(), mPaint);
			}
		}
示例#2
0
		public override void draw(android.graphics.Canvas canvas)
		{
			android.graphics.Bitmap bitmap = mBitmap;
			if (bitmap != null)
			{
				android.graphics.drawable.BitmapDrawable.BitmapState state = mBitmapState;
				if (state.mRebuildShader)
				{
					android.graphics.Shader.TileMode? tmx = state.mTileModeX;
					android.graphics.Shader.TileMode? tmy = state.mTileModeY;
					if (tmx == null && tmy == null)
					{
						state.mPaint.setShader(null);
					}
					else
					{
						state.mPaint.setShader(new android.graphics.BitmapShader(bitmap, tmx == null ? android.graphics.Shader.TileMode
							.CLAMP : tmx, tmy == null ? android.graphics.Shader.TileMode.CLAMP : tmy));
					}
					state.mRebuildShader = false;
					copyBounds(mDstRect);
				}
				android.graphics.Shader shader = state.mPaint.getShader();
				if (shader == null)
				{
					if (mApplyGravity)
					{
						int layoutDirection = getResolvedLayoutDirectionSelf();
						android.view.Gravity.apply(state.mGravity, mBitmapWidth, mBitmapHeight, getBounds
							(), mDstRect, layoutDirection);
						mApplyGravity = false;
					}
					canvas.drawBitmap(bitmap, null, mDstRect, state.mPaint);
				}
				else
				{
					if (mApplyGravity)
					{
						copyBounds(mDstRect);
						mApplyGravity = false;
					}
					canvas.drawRect(mDstRect, state.mPaint);
				}
			}
		}
示例#3
0
		public override void draw(android.graphics.Canvas canvas)
		{
			if (!ensureValidRect())
			{
				// nothing to draw
				return;
			}
			// remember the alpha values, in case we temporarily overwrite them
			// when we modulate them with mAlpha
			int prevFillAlpha = mFillPaint.getAlpha();
			int prevStrokeAlpha = mStrokePaint != null ? mStrokePaint.getAlpha() : 0;
			// compute the modulate alpha values
			int currFillAlpha = modulateAlpha(prevFillAlpha);
			int currStrokeAlpha = modulateAlpha(prevStrokeAlpha);
			bool haveStroke = currStrokeAlpha > 0 && mStrokePaint.getStrokeWidth() > 0;
			bool haveFill = currFillAlpha > 0;
			android.graphics.drawable.GradientDrawable.GradientState st = mGradientState;
			bool useLayer = haveStroke && haveFill && st.mShape != LINE && currStrokeAlpha < 
				255 && (mAlpha < 255 || mColorFilter != null);
			if (useLayer)
			{
				if (mLayerPaint == null)
				{
					mLayerPaint = new android.graphics.Paint();
				}
				mLayerPaint.setDither(mDither);
				mLayerPaint.setAlpha(mAlpha);
				mLayerPaint.setColorFilter(mColorFilter);
				float rad = mStrokePaint.getStrokeWidth();
				canvas.saveLayer(mRect.left - rad, mRect.top - rad, mRect.right + rad, mRect.bottom
					 + rad, mLayerPaint, android.graphics.Canvas.HAS_ALPHA_LAYER_SAVE_FLAG);
				// don't perform the filter in our individual paints
				// since the layer will do it for us
				mFillPaint.setColorFilter(null);
				mStrokePaint.setColorFilter(null);
			}
			else
			{
				mFillPaint.setAlpha(currFillAlpha);
				mFillPaint.setDither(mDither);
				mFillPaint.setColorFilter(mColorFilter);
				if (haveStroke)
				{
					mStrokePaint.setAlpha(currStrokeAlpha);
					mStrokePaint.setDither(mDither);
					mStrokePaint.setColorFilter(mColorFilter);
				}
			}
			switch (st.mShape)
			{
				case RECTANGLE:
				{
					if (st.mRadiusArray != null)
					{
						if (mPathIsDirty || mRectIsDirty)
						{
							mPath.reset();
							mPath.addRoundRect(mRect, st.mRadiusArray, android.graphics.Path.Direction.CW);
							mPathIsDirty = mRectIsDirty = false;
						}
						canvas.drawPath(mPath, mFillPaint);
						if (haveStroke)
						{
							canvas.drawPath(mPath, mStrokePaint);
						}
					}
					else
					{
						if (st.mRadius > 0.0f)
						{
							// since the caller is only giving us 1 value, we will force
							// it to be square if the rect is too small in one dimension
							// to show it. If we did nothing, Skia would clamp the rad
							// independently along each axis, giving us a thin ellipse
							// if the rect were very wide but not very tall
							float rad = st.mRadius;
							float r = System.Math.Min(mRect.width(), mRect.height()) * 0.5f;
							if (rad > r)
							{
								rad = r;
							}
							canvas.drawRoundRect(mRect, rad, rad, mFillPaint);
							if (haveStroke)
							{
								canvas.drawRoundRect(mRect, rad, rad, mStrokePaint);
							}
						}
						else
						{
							canvas.drawRect(mRect, mFillPaint);
							if (haveStroke)
							{
								canvas.drawRect(mRect, mStrokePaint);
							}
						}
					}
					break;
				}

				case OVAL:
				{
					canvas.drawOval(mRect, mFillPaint);
					if (haveStroke)
					{
						canvas.drawOval(mRect, mStrokePaint);
					}
					break;
				}

				case LINE:
				{
					android.graphics.RectF r = mRect;
					float y = r.centerY();
					canvas.drawLine(r.left, y, r.right, y, mStrokePaint);
					break;
				}

				case RING:
				{
					android.graphics.Path path = buildRing(st);
					canvas.drawPath(path, mFillPaint);
					if (haveStroke)
					{
						canvas.drawPath(path, mStrokePaint);
					}
					break;
				}
			}
			if (useLayer)
			{
				canvas.restore();
			}
			else
			{
				mFillPaint.setAlpha(prevFillAlpha);
				if (haveStroke)
				{
					mStrokePaint.setAlpha(prevStrokeAlpha);
				}
			}
		}
示例#4
0
		public override void draw(android.graphics.Canvas canvas)
		{
			android.graphics.Rect r = getBounds();
			android.graphics.Paint paint = mShapeState.mPaint;
			int prevAlpha = paint.getAlpha();
			paint.setAlpha(modulateAlpha(prevAlpha, mShapeState.mAlpha));
			if (mShapeState.mShape != null)
			{
				// need the save both for the translate, and for the (unknown) Shape
				int count = canvas.save();
				canvas.translate(r.left, r.top);
				onDraw(mShapeState.mShape, canvas, paint);
				canvas.restoreToCount(count);
			}
			else
			{
				canvas.drawRect(r, paint);
			}
			// restore
			paint.setAlpha(prevAlpha);
		}
示例#5
0
		public override void draw(android.graphics.Canvas canvas, android.graphics.Paint 
			paint)
		{
			canvas.drawRect(mRect, paint);
		}