我是Android Graphics类的新手.我想使用触摸事件绘制图像(实际上是签名类型),并希望在我想保存时将其保存在SD卡上.我已经通过网络扫描了任何这样的教程,但我还没有找到.谁能告诉我如何使用触摸事件在画布上绘制并保存它.
任何教程或示例代码都会有很大帮助.
我正在开发赛车游戏.我能够移动,停止,加速.但是我希望当我按屏幕然后car(bitmap of car image)应该看起来,它已经跳到它的位置.我正在使用surfaceview绘制视图
我不想使用3D openGL.任何帮助深表感谢
我正在制作一个带滚动背景的动态壁纸.我有两个位图对象,我之间交替,以保持下一帧的先前绘制的像素.我在画布顶部绘制一个新行,然后调用drawBitmap将其余像素复制到画布上.
我正在使用Runnable对象来完成繁重的工作.它执行所需的所有复制和计算,然后锁定画布,在持有者上输入同步块,并对Canvas.drawBitmap(位图,rect,rect,paint)进行单次调用.屏幕上偶尔会出现白色闪烁,这似乎与高CPU活动有关.在使用traceview时,我发现drawBitmap操作,特别是Canvas.native_drawBitmap(),比正常时间长得多.通常它在2-4毫秒内完成,但是当我看到白色闪光时,它可能需要10到100毫秒.
private void draw() {
SurfaceHolder holder = getSurfaceHolder();
Canvas canvas = null;
prepareFrame();
try {
canvas = holder.lockCanvas();
synchronized (holder) {
if (canvas != null) {
drawFrame(canvas);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (canvas != null)
holder.unlockCanvasAndPost(canvas);
}
afterDrawFrame();
handler.removeCallbacks(drawRunner);
if (visible) {
handler.post(drawRunner);
}
}
Run Code Online (Sandbox Code Playgroud)
该draw()函数run()在Runnable中调用.
private void prepareFrame() {
num++;
if (num%2 == 0) {
mainBmp = mainBmp1;
mainCan.setBitmap(mainBmp1);
mainCan.drawBitmap(mainBmp2, source, destination, null);
} else { …Run Code Online (Sandbox Code Playgroud) 我创建了一个自定义视图CircleView,如下所示:
public class CircleView extends LinearLayout {
Paint paint1;
public CircleView(Context context) {
super(context);
init();
}
public CircleView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public void init() {
paint1 = new Paint();
paint1.setColor(Color.RED);
}
protected void onDraw(Canvas canvas) {
//super.onDraw(canvas);
canvas.drawCircle(50, 50, 25, paint1);
this.draw(canvas);
}
}
Run Code Online (Sandbox Code Playgroud)
然后我将它包含在我的Activity的布局根目录中<RelativeLayout>:
<com.turkidroid.test.CircleView
android:id="@+id/circle_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_centerInParent="true" />
Run Code Online (Sandbox Code Playgroud)
但是,没有画出来!
一些信息:
com.turkidroid.test.onDraw()方法中,我尝试包含super.onDraw()和评论它.我正在尝试实现一个使用圆角绘制自己的LinearLayout子类.根据我的研究,我设置setWillNotDraw(false)并覆盖onDraw()在画布上绘制一个圆角矩形:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int sc = canvas.saveLayer(0, 0, getWidth(), getHeight(), drawPaint, Canvas.MATRIX_SAVE_FLAG | Canvas.CLIP_SAVE_FLAG | Canvas.HAS_ALPHA_LAYER_SAVE_FLAG
| Canvas.FULL_COLOR_LAYER_SAVE_FLAG | Canvas.CLIP_TO_LAYER_SAVE_FLAG);
canvas.drawRoundRect(bounds, mCornerRadius, mCornerRadius, roundPaint);
canvas.restoreToCount(sc);
}
Run Code Online (Sandbox Code Playgroud)
哪里:
drawPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
drawPaint.setColor(0xffffffff);
drawPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
roundPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
roundPaint.setColor(0xffffffff);
Run Code Online (Sandbox Code Playgroud)
DST_IN这里似乎是正确的选择(根据APIDemos示例),但应该是透明的区域(圆形的)具有黑色背景,并且子项的角仍然可见.这是使用Android 4.2.2的Galaxy Nexus的结果:

任何提示?
编辑:这是我想要实现的,抱歉photoshopping的粗糙:)

编辑2:我向GitHub添加了一个可运行的示例项目:https://github.com/venator85/RoundClippingLayout
谢谢 ;)
我想实现一种功能,当有人试图解锁我的设备并输入错误密码3次时,通过前置摄像头捕获图像.我检查过它可以在Android中使用,某些应用程序也可以在Market中使用.
我已经做了一些工作来实现这一目标,但我得到了一个黑色的图像.这是代码:
注册设备管理员以获取广播的错误密码尝试:
public class DeviceAdminSample extends DeviceAdminReceiver {
static Context ctx;
static SharedPreferences getSamplePreferences(Context context) {
ctx = context;
return context.getSharedPreferences(
DeviceAdminReceiver.class.getName(), 0);
}
@Override
public void onPasswordFailed(Context context, Intent intent) {
super.onPasswordFailed(context, intent);
System.out.println("Password Attempt is Failed...");
Intent i = new Intent(context, CameraView.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
Run Code Online (Sandbox Code Playgroud)
Camera Class捕获图像并将其保存到SD卡:
public class CameraView extends Activity implements SurfaceHolder.Callback,
OnClickListener {
private static final String TAG = "CameraTest";
Camera mCamera;
boolean mPreviewRunning = false;
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
Log.e(TAG, …Run Code Online (Sandbox Code Playgroud) android android-intent android-camera android-camera-intent android-canvas
通常我看到的样本,在尝试在画布上绘制位图时使用此方法.例如:
paint.setAntiAlias(true);
paint.setFilterBitmap(true);
paint.setDither(true);
Run Code Online (Sandbox Code Playgroud)
但我不知道这三种方法是做什么的?当我必须使用它们时?
我需要创建一系列同心椭圆(环),并需要在这些椭圆的圆周上放置用户图标.见下图.

直到现在我在画布上绘制了3个椭圆同心圆并放置了用户图标.我需要用户图标可以跨越环.
请提供实施方法.
我为Splash Screen活动开发了一个自定义动画:
=>这是一个动画,显示正在发生的事情:
当然我的真实应用:
我的设计师为我提供了60个png文件.
=>举例说明:
我的目标是:
为了运行它,我有一个SpashScreenActivity的多层布局:
以下是SpashScreen布局的xml代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="bottom">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="invisible"
android:orientation="vertical">
<FrameLayout
android:id="@+id/fl_logo_top_marge_hidden"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:visibility="invisible"
android:background="@color/colorPrimary" />
<include
android:visibility="invisible"
android:id="@+id/l_logo_activate_hidden"
layout="@layout/part_logo_activate"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<FrameLayout
android:visibility="invisible"
android:id="@+id/fl_logo_bottom_marge_hidden"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="@color/colorPrimary" />
<fr.millezimsolutions.app.splashanimation.SquareAspectWidthBasedImageView
android:visibility="invisible"
android:id="@+id/iv_home_hidden"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="fitXY"
android:src="@drawable/p_log_android" />
<FrameLayout
android:visibility="invisible"
android:id="@+id/fl_bar_hidden"
android:layout_width="match_parent"
android:layout_height="@dimen/start_degustation_bar_height"
android:background="@color/colorAccent"
android:gravity="bottom" />
</LinearLayout>
<LinearLayout
android:id="@+id/fl_middle"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
android:background="@color/colorPrimary"
android:gravity="bottom"
android:orientation="vertical">
<fr.millezimsolutions.app.splashanimation.FitXCropTopImageView
android:id="@+id/iv_slogan" …Run Code Online (Sandbox Code Playgroud) optimization animation android android-animation android-canvas
我正在使用我自己的https://github.com/mdg-iitr/RotatingText版本来显示旋转文本小部件。此 GitHub 中提供了一个视频,可让您观看动画。这个想法是设置单词行。行是一行接一行地显示的。整行都在旋转(它的话也是如此)。当前一行的旋转动画结束时,会在前一行之后显示一行。
我使用 aDynamicLayout来显示文本行。请记住:行必须旋转。
我的问题是:显然,我不能使用该方法canvas.drawTextOnPath(dynamicLayoutObject)。所以,我做的是:dynamicLayoutObjec.draw(canvas);。但那时没有任何动画。事实上,文本(所以DynamicLayout包含它)必须旋转。
的DynamicLayout(事实上,它的文本)必须动画(旋转)。旋转可以在这个 SO 问题(https://github.com/mdg-iitr/RotatingText)开头给出的 Github 原始存储库的插图中找到。
我不知道如何让我的DynamicLayout(和/或其文本)沿着我的路径旋转。
我大约在 8 个月前修改了原始 RotatingText 库。为了简化它(更少的类,更少的方法,没有未使用的方法等)。事实上,我只有两个类:
RotatingTextSwitcher,这是 XML 小部件
And Rotatable,其中包含要旋转的字符串数组。
包含 XML 小部件的 .XML 布局RotatingTextSwitcher以对其进行测试
AFragment膨胀前面提到的布局,设置每个旋转行的单词,并显示它们。
为了测试它,创建一个显示下面给出的片段的活动,它反过来使用上面提供的其他来源。
import android.graphics.Path;
import android.view.animation.Interpolator;
public class Rotatable {
private final String[] text;
private final int update_duration;
private int animation_duration;
private Path path_in, path_out;
private …Run Code Online (Sandbox Code Playgroud) android android-widget android-layout android-canvas android-view
android ×10
android-canvas ×10
android-view ×1
animation ×1
bitmap ×1
graphics ×1
handwriting ×1
optimization ×1
surfaceview ×1