当我将canvas方法与canvas对象一起使用时,canvas对象不会旋转.为什么会这样?这是我的代码
package com.example.hello;
import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.os.Bundle; import android.view.View; import android.widget.LinearLayout;
public class CanvasDrawExample extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.example);
LinearLayout rl=(LinearLayout)findViewById(R.id.rl);
rl.addView(new CircleView(this));
}
public class CircleView extends View
{
public CircleView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
Paint p=new Paint(Paint.ANTI_ALIAS_FLAG);
p.setStrokeWidth(100);
p.setStyle(Paint.Style.STROKE);
p.setColor(Color.BLUE);
canvas.drawRect(200, 100, 200, …Run Code Online (Sandbox Code Playgroud) 我正在使用Canvas.drawBitmap(Bitmap位图,Rect src,Rect dst,Paint paint)绘制图像.我想翻转图像左右移动,但我不能使用这种方法的矩阵.我可以使用canvas.rotate旋转,但这没有用于翻转,任何想法?
我正在画布上绘制一些文本,并且正在使用StaticLayout在屏幕上包装文本。我想对齐文本,以使文本的底部位于屏幕的底部。
为此,我需要知道StaticLayout将文本包装成多少行,因此我可以将其乘以字体大小,并将其与组件的高度偏移很多。
这是我的StaticLayout:
main = new TextPaint();
main.setTextSize(textSize);
main.setColor(Color.WHITE);
bottomText = new StaticLayout("Long text that requires wrapping.", main, getWidth(), Layout.Alignment.ALIGN_CENTER, 1f, 1.0f, false);
Run Code Online (Sandbox Code Playgroud)
我通过翻译画布来向下移动它:
canvas.translate(0, getHeight() / 2);
bottomText.draw(canvas);
canvas.restore();
Run Code Online (Sandbox Code Playgroud)
所以; 如何将其对齐至底部,或获取已拆分成的行数?
当我在canvas对象上使用drawRect()并且在onCreate方法中声明它时,为什么矩形没有显示.
码
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activitymain);
Chronometer stopWatch = (Chronometer)findViewById(R.id.chrono);
mDrawingActivity = (DrawingActivity)findViewById(R.id.the_canvas);
Button b = (Button)findViewById(R.id.startButton);
b.setText("start");
b.setOnClickListener(this);
}
Run Code Online (Sandbox Code Playgroud)
OnDraw()方法
protected void onDraw(Canvas Square)
{
super.onDraw(Square);
Paint squareColor = new Paint();
squareColor.setColor(Color.CYAN); // change the box color to cyan
Square.drawRect(100,100,100,100, squareColor);
return;
}
Run Code Online (Sandbox Code Playgroud)
澄清:即使按钮和计时器也没有显示,程序被强制关闭.
我正在将Skycons移植到Android上,我的大部分工作都在工作,除了月亮使用Canvas.arc带有逆时针参数的HTML5 .
我试图这样实现:
RectF rect = new RectF();
public void arcR( Path path, float x, float y, float radius, double startAngle, double endAngle, boolean anticlockwise ){
// Set bounds
rect.set( x - radius, y - radius, x + radius, y + radius );
// Convert to degrees
startAngle = Math.toDegrees(startAngle);
endAngle = Math.toDegrees(endAngle);
if(anticlockwise){
startAngle = 360 - startAngle;
endAngle = 360 - endAngle;
}
endAngle = endAngle - startAngle;
path.addArc(rect, (float)startAngle, (float)endAngle);
}
Run Code Online (Sandbox Code Playgroud)
我认为我没有正确实施逆时针,因为在我的设备上绘制月球(基于Skycons)看起来像这样:
我正在试图弄清楚如何在ImageView中"切出一个羽毛孔".
原因是,我正在创建一个教程,我希望整个屏幕变暗.通过放置一个alpha值约为50%的黑色图像,这很容易做到.接下来我想在那个叠加层上切一个洞,这样你就可以更清楚地看到它下面的东西了.我们的目标是突出显示用户点击的按钮和内容,以便他们学习如何操作.
当我之前在ActionScript/Flash中执行此操作时,很容易在屏幕上放置一个暗淡的alpha,然后创建一个圆圈,缩放它的X和Y以匹配我想要突出显示的对象,然后使用它添加一个过滤器它的混合模式设置为SUBTRACT.这个减去圆/椭圆也可以被告知接受鼠标点击,并且这个孔很好用.
在android中,我似乎无法看到如何从视图中减去.我可以看到人们使用滤色器添加到视图或更改颜色.
所以,除非我错过了船,你怎么减去?
我使用 SurfaceView 在屏幕上移动两个位图图片。我试过这个:
...
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
...
canvas.drawBitmap(bitmap,matrix,paint);
canvas.drawBitmap(bitmap2,matrix,paint);
}
...
Run Code Online (Sandbox Code Playgroud)
如何像这样将画布保存到 sdCard 中?
public saveCanvasIntoSdCard(Canvas canvas)
{
}
Run Code Online (Sandbox Code Playgroud) android surfaceview surfaceholder android-canvas android-bitmap
我怎样才能创建与此相同的仪表?这种规格类型是否存在任何库或专家?我使用帆布作为圆规,但我无法创建这个
RectF oval = getOval(canvas, 1);
RectF oval2 = getOval(canvas, 1.1f);
Paint paint = new Paint();
paint.setColor(Color.DKGRAY);
canvas.drawArc(oval2, 180, 90, true, paint);
canvas.drawArc(oval, 180, 90, true, backgroundPaint);
RectF innerOval = getOval(canvas, 0.9f);
canvas.drawArc(innerOval, 180, 90, true, backgroundInnerPaint);
<GaugeView
android:id="@+id/gauge"
android:layout_width="@dimen/panel_gauge_height"
android:layout_height="@dimen/panel_gauge_width"
app:divisions="8"
app:scaleEndValue="8"
app:scaleStartAngle="50"
app:scaleStartValue="0"
app:showNeedle="true"
app:subdivisions="2" />
Run Code Online (Sandbox Code Playgroud)
我在onCreateView()Fragment中夸大了版面。此布局包含一个自定义视图。现在文档的onActivityCreated()说,这是“ 片段的活动已创建时调用这个片段的视图层次实例化 ”。这意味着布局已膨胀,并且布局中的视图之前已创建onActivityCreated()。
那么,这是否意味着视图的onLayout(),onSizeChanged()和onDraw()方法之前调用onActivityCreated()?
android ondraw android-fragments android-canvas android-view
我为矩形创建了一个类,因为它是我的应用程序中的一个对象。但是现在我希望角落是圆的。在下面你可以看到它是一个简单的骨骼类,用于创建我想要的具有相同属性的任意数量的矩形。
public class customDrawable extends ShapeDrawable {
public void setCustomDrawableAttributes(ShapeDrawable shapeDrawable){
int x = 0;
int y = 0;
int width = 100;
int height = 100;
shapeDrawable.setBounds(x, y-height, x + width,y+height );
}
public ShapeDrawable createShape(){
return new ShapeDrawable(new RectShape());
}
}
Run Code Online (Sandbox Code Playgroud)
更新:如果没有这种方法,我将无法绘制任何内容,因为没有大小。有了它,它只绘制通常的矩形。(更改为不显示特定于应用程序的方法的整数值)
public void setDrawableAttributes(ShapeDrawable shapeDrawable){
int x = 0;
int y = 500
int width = 200
int height = 300
shapeDrawable.setBounds(x, y-height, x + width,y+height );
Run Code Online (Sandbox Code Playgroud)
}
从我的研究中,我发现我不能简单地添加圆角,而是必须创建一个RoundRectShape shapeDrawable. 我使用此方法创建带圆角的矩形的每次尝试都RoundRectShape失败了。不知何故,形状总是最终成为一个没有圆角的规则矩形。
我正在寻找一个简单的骨骼类(就像提供的那个),它创建一个 roundRectShape …
java android android-canvas shapedrawable android-shapedrawable
android ×10
android-canvas ×10
java ×2
android-view ×1
drawing ×1
eclipse ×1
erase ×1
gauge ×1
graphics ×1
layout ×1
ondraw ×1
surfaceview ×1