我想根据android中的特定角度旋转图像,有些像指南针...
我有这个代码...它适用于drawPath(),但我想用图像替换路径和绘图的东西..我试图创建一个位图图像,DrawBitmapImage,但图像不像路径一样旋转..任何请帮忙?
public void draw(Canvas canvas) {
double angle = calculateAngle(currentLongitude, currentLatitude, targetLongitude, targetLatitude);
//Correction;
angle-=90;
//Correction for azimuth
angle-=azimuth;
if((getContext() instanceof Activity) && ((Activity)getContext()).getWindowManager().getDefaultDisplay().getOrientation()==Configuration.ORIENTATION_PORTRAIT)angle-=90;
while(angle<0)angle=angle+360;
Rect rect = canvas.getClipBounds();
int height = rect.bottom-rect.top;
int width = rect.right-rect.left;
int left = rect.left;
int top = rect.top;
if(height>width){
top+=(height-width)/2;
height=width;
}
if(width>height){
left+=(width-height)/2;
width=height;
}
float centerwidth = width/2f;
float centerheight = height/2f;
Paint p = new Paint();
p.setColor(color);
p.setStyle(Paint.Style.FILL);
p.setAntiAlias(true);
float startX = left+(float)(centerwidth+Math.cos(deg2rad(angle))*width/3.0);
float startY = top+(float)(centerheight+Math.sin(deg2rad(angle))*height/3.0);
Path path …Run Code Online (Sandbox Code Playgroud) 我正在制作Android应用程序而且我有一件棘手的事情要做.我需要在画布上绘制一条路径,但绘图应该是动画的(即,稍微延迟后逐点绘制).
是否可以使用Android SDK制作这样的东西?如果没有,我怎么能产生这种效果?
我正在画布上绘制2D图像.
我想将画布上显示的图像保存为JPEG文件,我该怎么办?
我正在从像这样的资源加载位图:
Bitmap mBackground = BitmapFactory.decodeResource(res,R.drawable.image);
Run Code Online (Sandbox Code Playgroud)
我想要做的是在我的绘制方法中将它绘制到主画布之前对位图进行一些更改(因为当它不会改变时,在我的主循环中重复大量绘制似乎很浪费).我正在使用以下内容对位图进行更改:
Canvas c = new Canvas(mBackground);
c.drawARGB(...); // etc
Run Code Online (Sandbox Code Playgroud)
所以我自然会得到一个例外
java.lang.IllegalStateException: Immutable bitmap passed to Canvas constructor
Run Code Online (Sandbox Code Playgroud)
所以为了避免这种情况,我制作了位图的副本,以便它是可变的
Bitmap mBackground = BitmapFactory.decodeResource(res,R.drawable.image).copy(Bitmap.Config.ARGB_8888, true);
Run Code Online (Sandbox Code Playgroud)
哪个避免了问题,但它有时会导致OutOfMemoryExceptions,知道更好的方法来实现我想要的东西吗?
我正在尝试开发一个自定义组件,即弧形滑块,我完成了弧和拇指,但无法弄清楚如何绘制圆角边弧以及其中的浮雕效果.此刻滑块看起来像这样

绘制弧的代码是
private void drawSlider(Canvas canvas) {
float sweepDegrees = (value * arcWidthInAngle)
/ (maximumValue - minimumValue);
// the grey empty part of the circle
drawArc(canvas, startAngle, arcWidthInAngle, mTrackColor);
// the colored "filled" part of the circle
drawArc(canvas, startAngle, sweepDegrees, mFillColor);
// the thumb to drag.
int radius = ((diameter/2) - (mArcThickness/2));
Point thumbPoint = calculatePointOnArc(centerX, centerY, radius, startAngle + sweepDegrees);
thumbPoint.x = thumbPoint.x - (mThumbDiameter/2);
thumbPoint.y = thumbPoint.y - (mThumbDiameter/2);
Bitmap thumbBitmap = BitmapFactory.decodeResource(
mContext.getResources(), R.drawable.circle25);
thumbBitmap = getResizedBitmap(thumbBitmap, …Run Code Online (Sandbox Code Playgroud) 我是Android的新手.
我正在我的视图的OnDraw(Canvas画布)方法中的Canvas上绘制位图,线条和形状.我正在寻找有关如何实现平滑滚动以响应用户拖动的帮助.我已经搜索但没有找到任何教程来帮助我.
Canvas的引用似乎表明,如果Canvas是从Bitmap构建的(比方说称为bmpBuffer),那么在Canvas上绘制的任何内容也会在bmpBuffer上绘制.是否可以使用bmpBuffer来实现滚动...也许可以将它复制回Canvas一次移动几个像素?但是如果我使用Canvas.drawBitmap将bmpBuffer绘制回Canvas移动几个像素,bmpBuffer会不会被破坏?因此,也许,我应该将bmpBuffer复制到bmpBuffer2,然后将bmpBuffer2绘制回Canvas.
一个更直接的方法是将线条,形状等直接绘制到缓冲区中Bitmap然后将该缓冲区(带有移位)绘制到Canvas上,但我可以看到各种方法:drawLine(),drawShape()等等不能用于绘制到Bitmap ...仅用于Canvas.
我可以有2幅画布吗?其中一个是从缓冲区位图构造的,仅用于绘制线条,形状等,然后缓冲区位图将被绘制到另一个Canvas中以便在View中显示?
我应该欢迎任何建议!
这里(和其他网站上)类似问题的答案是指"blitting".我理解这个概念,但在Android文档中找不到关于"blit"或"bitblt"的任何内容.Canvas.drawBitmap和Bitmap.Copy是Android的等价物吗?
这看起来应该有些微不足道,但是在我的Android应用程序中,我使用画布绘制一系列连接在一起的线条.由于某种原因,我的线条非常微弱和薄.我想知道如何让我的线条变粗?这是我的代码..
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);
}
Run Code Online (Sandbox Code Playgroud)
另一件事是我绘制的线条和圆圈总是黑色的.setColor()似乎从来没有任何效果.我尝试过使用颜色名称(例如color.red)甚至是十六进制值(例如0xffff0000)
我一直在尝试创建一个在文本下模糊形状的自定义视图.问题是BlurMaskFilter对我在画布上绘制的任何形状都没有影响.以下是我在构造函数中初始化Paint对象的方法:
paint = new Paint(0);
paint.setColor(0xffffffff);
paint.setMaskFilter(new BlurMaskFilter(8, BlurMaskFilter.Blur.NORMAL));
mShadowPaint = new Paint(0);
mShadowPaint.setColor(0xff333333);
mShadowPaint.setMaskFilter(new BlurMaskFilter(10, BlurMaskFilter.Blur.NORMAL));
Run Code Online (Sandbox Code Playgroud)
我在onDraw()中调用这样的函数:
canvas.drawOval(mShadowBounds,mShadowPaint);
canvas.drawText("hello", x, y, paint);
Run Code Online (Sandbox Code Playgroud)
但这就是我所看到的.

使用android 4.0 sdk并在4.0.4 galaxy nexus设备(英国)上进行测试.我想知道这是不是4.0.4中的一个错误,因为我在4.0和4.0.3模拟器上测试它并且它确实很好地模糊了它们,除非我做错了什么?
编辑:这是在其他平台上测试它的扩展View代码.
import android.content.Context;
import android.graphics.BlurMaskFilter;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;
public class BlurTestView extends View{
private Paint paint;
private Paint mShadowPaint;
private int size = 100;
private RectF mShadowBounds = new RectF();
public BlurTestView(Context context) {
this(context, null, 0);
}
public BlurTestView(Context context, AttributeSet attrs) { …Run Code Online (Sandbox Code Playgroud) 从android 3.0 开始,硬件加速开启的设备不再支持clipPath()方法.(阅读本文了解更多详情).
我正在使用画布,我需要绘制圆形图像.关于我该怎么做的任何想法?
*我无法关闭硬件加速,我正在寻找其他解决方案.
回答:Tnx @Malcolm的答案.我发现了一个展示这种技术的好例子,它基本上是一个面具.
每次我使用这个代码都没有画出来.我需要在指定的矩形内绘制一个位图.
canvas.drawBitmap(MyBitmap, null, rectangle, null)
Run Code Online (Sandbox Code Playgroud)
我看过网上但找不到多少帮助.