Articles of graphics

Android绘制一条animation线

我目前正在使用graphics和path,我可以成功地显示任何我想要的。 但不是直接在我的SurfaceView上绘制一条线,我想在animation中逐渐绘制它。 到目前为止,我所做的是创build一个path,然后使用PathMeasure沿path逐步检索坐标。 这基本上是我迄今为止所做的 PathMeasure pm = new PathMeasure(myPath, false); float position = 0; float end = pm.getLength(); float[] coord = {0,0,0,0,0,0,0,0,0}; while (position < end){ Matrix m = new Matrix(); // put the current path position coordinates into the matrix pm.getMatrix(position, m, PathMeasure.POSITION_MATRIX_FLAG | PathMeasure.TANGENT_MATRIX_FLAG); // put the matrix data into the coord array […]

在android imageview中旋转变焦拖动图像

我想能够在android framelayout和imageview中旋转,缩放和移动图像。 用下面的代码,我能够做到这一点。 但是这个观点有时会从UI中走出来。 正如你可以c我处理ACTION_UP(每个ACTION_UP 90度旋转)motionevent旋转。 以下是我的main.xml: <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:id="@+id/imageView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:src="@drawable/csf6a4_flipped" android:scaleType="matrix" > </ImageView> </FrameLayout> 以下是我的java文件: package com.example.rotatezoommove; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Matrix; import android.graphics.PointF; import android.os.Bundle; import android.util.FloatMath; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.widget.ImageView; public class RotateZoomMove extends […]

获取包含位图支持的canvas的Android视图上的点的像素颜色值

我试图找出最佳的方式来获取视图上给定点的像素颜色值。 有三种方法可以写入视图: 我用View.setBackgroundDrawable(…)设置了一个背景图像。 我用Canvas.drawText(…) , Canvas.drawLine(…)等写入文本,画线等,到一个位图支持的canvas 。 我通过写入传递给View的onDraw(Canvas canvas)方法的Canvas来绘制子对象(精灵)。 这是从我的类扩展视图的onDraw()方法: @Override public void onDraw(Canvas canvas) { // 1. Redraw the background image. super.onDraw(canvas); // 2. Redraw any text, lines, etc. canvas.drawBitmap(bitmap, 0, 0, null); // 3. Redraw the sprites. for (Sprite sprite : sprites) { sprite.onDraw(canvas); } } 获得一个像素的颜色值的最好方法是什么,这将考虑所有这些来源?

在canvas上绘制九个补丁(Android)

我试图在Android上的一个Canvas对象上绘制九个补丁。 奇怪的是,尽pipe我使用draw9patch工具生成了我的九个补丁,但NinePatch的构造函数需要一个名为“chunk”的附加字节数组来构造九个补丁。 为什么这不简单? 什么是“大块”? 如果你自己做了这个,你是怎么做的? 任何帮助赞赏。

你可以在TextView上设置graphics布局预览文本吗?

我有一个样式的TextView,其实际文本在运行时dynamic填充。 graphics布局视图对于了解这个组件如何在外观和感觉等方面与其他工作非常有用。这个文本字段没有合理的默认值,我希望它在填充之前是空白的。 如果我没有在TextView声明中指定任何文本,那么TextView是空白的。 我可以使用以下方法手动设置文本: <TextView … android:text="Preview text"/> 然后切换到graphics布局。 但是,我必须记得删除这个或者冒着它在我的生产版本被运送的风险。 有没有一种方法可以指定仅在graphics布局预览中看到但在运行时不可用的文本? 编辑:我使用Eclipse ADT。

计算由两点定义的线之间的angular度

我目前正在为Android开发一个简单的2D游戏。 我有一个位于屏幕中心的静止物体,我试图让这个物体旋转,并指向用户触摸屏幕上的区域。 我有恒定的坐标,代表屏幕的中心,我可以得到用户点击的坐标。 我正在使用这个论坛中列出的公式: 如何获得两点之间的angular度? 它说:“如果你想要这两个点定义的线和横轴之间的angular度: double angle = atan2(y2 – y1, x2 – x1) * 180 / PI;". 我实现了这一点,但我认为我正在屏幕坐标工作的事实是造成错误的计算,因为Y坐标是相反的。 我不知道这是否是正确的方法,任何其他的想法或build议表示赞赏。

Android中“屏幕大小”和“屏幕密度”的区别?

我有几个问题: 什么是屏幕尺寸 ? 屏幕密度是多less? 屏幕尺寸和屏幕密度有什么区别 ? 我如何在Android中支持不同的密度和不同的屏幕尺寸? 我已经阅读了官方文档 ,但我无法理解屏幕尺寸和屏幕密度之间的差异。

Androidcanvas画线 – 使线条变粗

这似乎应该有点微不足道,但是在我的Android应用程序中,我使用canvas绘制一系列连接在一起的线。 出于某种原因,我的线条非常非常微弱。 我想知道如何让我的线条更厚? 这是我的代码 for(int i=1; i<myArrayListOfValues.size(); i++){ Paint myPaint = new Paint(Paint.ANTI_ALIAS_FLAG); myPaint.setStrokeWidth(8/*1 /getResources().getDisplayMetrics().density*/); myPaint.setColor(0xffff0000); //color.RED canvas.drawLine(myArrayListOfValues.get(i), myArrayListOfValues.get(i), myArrayListOfValues.get(i-1), myArrayListOfValues.get(i-1), myPaint); } 另一件事是..我画的线和圈子总是黑色.. setColor()似乎从来没有任何效果。 我试过使用颜色名称(如color.red),甚至他们的hex值(例如0xffff0000)

Android的 – 如何绘制一个基于弧的渐变

我正在尝试创build一个逐渐从一种颜色到另一种颜色的弧度(可变度数)。 从蓝色到红色的例子: 这是我的代码: SweepGradient shader = new SweepGradient(center.x, center.y, resources.getColor(R.color.startColor),resources.getColor(R.color.endColor)); Paint paint = new Paint() paint.setStrokeWidth(1); paint.setStrokeCap(Paint.Cap.FILL); paint.setStyle(Paint.Style.FILL); paint.setShader(shader); canvas.drawArc(rectF, startAngle, sweepAngle, true, paint); 但结果是整个弧线被涂上了相同的颜色。 编辑: 经过更多的实验后,我发现颜色的扩散是由弧的angular度决定的。 如果我绘制一个小angular度的弧线,只显示第一个颜色。 angular度越大,绘制的颜色越多。 如果angular度很小,似乎没有梯度。 这是一个例子。 我正在绘制4弧 – 90,180,270和360: RectF rect1 = new RectF(50, 50, 150, 150); Paint paint1 = new Paint(); paint1.setStrokeWidth(1); paint1.setStrokeCap(Paint.Cap.SQUARE); paint1.setStyle(Paint.Style.FILL); SweepGradient gradient1 = new SweepGradient(100, […]

View.onDraw() – 它什么时候被调用?

我把一个Log.d()调用放到我的扩展视图的onDraw()中,这样我就可以看到它被调用的频率和时间。 它被称为视图的实例化,这并不奇怪。 但是,我注意到,即使我的代码没有做任何与graphics相关的任何事情,它也会在onTouchEvent()处理的每一个tap上调用。 然而,在视图的文档中,我似乎无法find什么时候实际调用onDraw()。 我并不是真的担心我的特定项目(这对我来说不会造成什么问题),我只想知道某个列表是否存在某个列表,或者显示某个View的操作顺序,尤其是什么原因onDraw()被调用。