- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个应用程序,一旦我摇动手机,它就会执行某项功能。为此,我创建了一个名为 ShakeListener 的类。当我打开它时,我的应用程序运行得非常好。当我打开应用程序并按后退按钮并转到主屏幕并摇动手机时,它会打开闪光灯(就像预期的那样),但当我再次打开应用程序时,它崩溃了。我不知道为什么会这样
我的主要 Activity 是
public class MainActivity extends ActionBarActivity {
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
SharedPreferences getprefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
boolean stopshake = getprefs.getBoolean("checkbox", true);
if (stopshake) {
mShaker = new ShakeListener(this);
mShaker.setOnShakeListener(new ShakeListener.OnShakeListener () {
public void onShake() {
if (!isFlashOn && mShaker != null ) {
getCamera();
turnOnFlash();
} else {
turnOffFlash();
}
}
});
} else {
if (mShaker != null) {
mShaker.setOnShakeListener(null);
mShaker = null;
}
}
}
private ToggleButton togle;
private Camera camera;
private boolean isFlashOn;
private boolean hasFlash;
Parameters params;
private ShakeListener mShaker;
MediaPlayer mp;
ImageView anime;
int p=1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
anime = (ImageView) findViewById(R.id.Animation);
hasFlash = getApplicationContext().getPackageManager()
.hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
if (!hasFlash) {
// device doesn't support flash
// Show alert message and close the application
AlertDialog alert = new AlertDialog.Builder(MainActivity.this)
.create();
alert.setTitle("Error");
alert.setMessage("Sorry, your device doesn't support flash light!");
alert.setButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// closing the application
finish(); }
});
alert.show();
return;}
getCamera();
togle = (ToggleButton) findViewById(R.id.ToggleButton01);
togle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
boolean checked = ((ToggleButton) v).isChecked();
if (checked){
turnOffFlash();
}
else{
getCamera();
turnOnFlash();
}
}
});
}
private void getCamera() {
// TODO Auto-generated method stub
if (camera == null) {
try {
camera = Camera.open();
params = camera.getParameters();
} catch (RuntimeException e) {
Log.e("Camera Error. Failed to Open. Error: ", e.getMessage());
}
} }
private void turnOnFlash() {
if (!isFlashOn) {
if (camera == null || params == null) {
return;
}
// play sound
getCamera();
playSound();
params = camera.getParameters();
params.setFlashMode(Parameters.FLASH_MODE_TORCH);
camera.setParameters(params);
camera.startPreview();
isFlashOn = true;
anime.setImageResource(R.drawable.anim);
anime.post(new Runnable() {
@Override
public void run() {
AnimationDrawable frameAnimation =
(AnimationDrawable) anime.getDrawable();
frameAnimation.start();
}
});
// changing button/switch image
}
}
private void turnOffFlash() {
if (isFlashOn) {
if (camera == null || params == null) {
return;
}
// play sound
playSound();
params = camera.getParameters();
params.setFlashMode(Parameters.FLASH_MODE_OFF);
camera.setParameters(params);
camera.stopPreview();
camera.setPreviewCallback(null);
camera.release();
camera = null;
isFlashOn = false;
anime.setImageResource(R.drawable.off);
// changing button/switch image
}
}
private void playSound() {
// TODO Auto-generated method stub
if(isFlashOn){
mp = MediaPlayer.create(MainActivity.this, R.raw.off1);
}else{
mp = MediaPlayer.create(MainActivity.this, R.raw.on1);
}
mp.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
mp.release();
}
});
mp.start();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
super.onOptionsItemSelected(item);
switch(item.getItemId()){
case R.id.action_settings:
Intent intent = new Intent(MainActivity.this, Prefsetting.class);
startActivity(intent);
break;
case R.id.about:
AlertDialog.Builder dlgAlert = new AlertDialog.Builder(this);
dlgAlert.setMessage("This is an alert with no consequence");
dlgAlert.setTitle("App Title");
dlgAlert.setPositiveButton("OK", null);
dlgAlert.setCancelable(true);
dlgAlert.create().show();
break;
}
return true;
}
}
我的 logcat 显示
08-23 04:31:53.205: D/ShakeListener(11990): ShakeListener invoked----> 08-23 04:31:53.207: D/ShakeListener(11990): ShakeListener setOnShakeListener invoked----> 08-23 04:31:53.312: D/AndroidRuntime(11990): Shutting down VM 08-23 04:31:53.314: E/AndroidRuntime(11990): FATAL EXCEPTION: main 08-23 04:31:53.314: E/AndroidRuntime(11990): Process: com.shakylight, PID: 11990 08-23 04:31:53.314: E/AndroidRuntime(11990): java.lang.ClassCastException: android.graphics.drawable.BitmapDrawable cannot be cast to android.graphics.drawable.AnimationDrawable 08-23 04:31:53.314: E/AndroidRuntime(11990): at com.shakylight.MainActivity$4.run(MainActivity.java:145) 08-23 04:31:53.314: E/AndroidRuntime(11990): at android.os.Handler.handleCallback(Handler.java:739) 08-23 04:31:53.314: E/AndroidRuntime(11990): at android.os.Handler.dispatchMessage(Handler.java:95) 08-23 04:31:53.314: E/AndroidRuntime(11990): at android.os.Looper.loop(Looper.java:135) 08-23 04:31:53.314: E/AndroidRuntime(11990): at android.app.ActivityThread.main(ActivityThread.java:5254) 08-23 04:31:53.314: E/AndroidRuntime(11990): at java.lang.reflect.Method.invoke(Native Method) 08-23 04:31:53.314: E/AndroidRuntime(11990): at java.lang.reflect.Method.invoke(Method.java:372) 08-23 04:31:53.314: E/AndroidRuntime(11990): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 08-23 04:31:53.314: E/AndroidRuntime(11990): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
最佳答案
当您转换时,问题似乎出现在以下行:
AnimationDrawable frameAnimation = (AnimationDrawable) anime.getDrawable();
您正在 ImageView
上使用 anime.setImageResource()
来设置您的可绘制对象。请尝试使用 anime.setImageDrawable(getResource().getDrawable(R.drawable.anim);
并查看错误是否仍然存在。
关于java - BitmapDrawable 无法转换为 AnimationDrawable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32161815/
我如何从代码而不是从 xml 将图像加载到动画,我有这个例子: java文件: ImageView img = (ImageView)findViewById(R.id.spinn
我现在正在编写一个应用程序,它使用占据大部分屏幕的四个主要按钮。每个都有三个动画:一个 12 帧的介绍动画、一个 33 帧的循环动画和一个基于当前帧关闭循环的动画。 图像高度在 250 250 到 4
我有一个 AnimationDrawable,我在开始动画之前初始化它并在它结束时回收它。问题是当我想再次开始动画时,我重新初始化所有内容但仍然给出异常 java.lang.RuntimeExcept
我想为四张图片设置动画以连续显示。在布局 XML 文件中,我正在创建一个 ImageView: 然后在我的代码中创建 AnimationDrawablevia private void startA
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我的 xml 文件中的 android:duration 属性有问题。那是我的代码: 有 8 张图片。这是我的 Activity 代码: public class MyActivity
我有同样的问题question asked 2 years ago没有有效答案(请不要为重复的内容关闭此问题;目前还没有答案/解决方案)。 所以,我有一个以编程方式制作的 AnimationDrawa
在可绘制动画中,您可以加载一个包含多个帧的动画列表,这些帧会一个接一个地播放。我只是想知道这里的内存消耗/效率。如果我有 50 或 60 张图片,这是否意味着它们全部加载到内存中然后一张一张地渲染,或
我有一个最初有位图图像的 ImageView: 默认情况下,imageview 会缩放位图以填充我想要的宽度。 但问题是,当我将 ImageView 的源更改为 AnimationDrawa
我以编程方式创建的 AnimationDrawable 有问题,当我通过 imageView.setBackgroundDrawable 将它分配给 ImageView 时,它就会启动(我支持 API
我正在关注 Google 提供的如何将 AnimationDrawable 与 ImageView 结合使用的示例。您可以在这里找到它:http://developer.android.com/gui
我有一组 10 张图像,我想创建一个动画,在这些图像之间交叉淡入淡出。我一直在研究内置的 Drawable 来实现这样的事情,但那部分运气不好。有 AnimationDrawable,它可以在图片之间
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 9 年前。 Improve t
我的代码: package net.tq5.bubbleexplosion; import android.app.Activity; import android.content.Context;
所以我希望我的动画在 Activity 创建后立即开始,但出于某种原因,无论我尝试什么都会让它开始。我可以通过点击事件来启动它,但我希望它自己启动。 这是我所拥有的,我该如何让它发挥作用? packa
我想用几个图像文件制作动画,为此 AnimationDrawable 效果很好。但是,我需要知道动画何时开始以及何时结束(即添加一个像 Animation.AnimationListener 这样的监
我必须为一个循环倒数计时器设置动画,我通过使用 AnimationDrawable 为 ImageView 的背景设置动画来实现(每个图像都删除了相应的圆切片)。问题是用户可以暂停这个动画,所以我必须
我正在尝试使用 AnimationDrawable 为一组图像制作动画。用户应该能够通过单击按钮暂停/恢复动画。我正在这样做,使用 setVisible(boolean visible, boolea
我正在开发一个应用程序,一旦我摇动手机,它就会执行某项功能。为此,我创建了一个名为 ShakeListener 的类。当我打开它时,我的应用程序运行得非常好。当我打开应用程序并按后退按钮并转到主屏幕并
我正在尝试让我的 Android 应用程序上的 AnimationDrawable 重复。我将 android:oneshot 配置为 false。 (尝试使用 java 和 XML)尽管如此,无论何
我是一名优秀的程序员,十分优秀!