java - Android 可以执行 Activity 的方法

标签 java android

我正在构建一个简单的绘图应用程序并遇到 logcat 给出的错误:

enter image description here

我正在使用以下代码:

这个 SaveDrawing.java 作为主要 Activity

package com.example.SaveDrawing;

import com.example.SaveDrawing.drawings.DrawingActivity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;


public class SaveDrawing extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    public void onClick(View view){
        switch (view.getId()){
            case R.id.drawBtn:
                //Intent drawIntent = new Intent(this, DrawingActivity.class);
                //startActivity( drawIntent);
                //Toast.makeText(getBaseContext(), "This is the Toast message", Toast.LENGTH_SHORT).show();
                Intent nextActivity = new Intent(SaveDrawing.this, DrawingActivity.class);
                startActivity(nextActivity);
                break;
        }
    }
}

那么点击按钮之后的下一个activity就是DrawingActivity.java

package com.example.SaveDrawing.drawings;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Paint;
import android.graphics.Path;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;

import java.io.File;
import java.io.FileOutputStream;

import com.example.SaveDrawing.R;
import com.example.SaveDrawing.R.id;
import com.example.SaveDrawing.R.layout;

public class DrawingActivity extends Activity implements View.OnTouchListener{
    private DrawingSurface drawingSurface;
    private DrawingPath currentDrawingPath;
    private Paint currentPaint;

    private Button redoBtn;
    private Button undoBtn;

    private static File APP_FILE_PATH = new File("/sdcard/TutorialForAndroidDrawings");


    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.drawing_activity);

        setCurrentPaint();

        drawingSurface = (DrawingSurface) findViewById(R.id.drawingSurface);
        drawingSurface.setOnTouchListener(this);

        redoBtn = (Button) findViewById(R.id.redoBtn);
        undoBtn = (Button) findViewById(R.id.undoBtn);

        redoBtn.setEnabled(false);
        undoBtn.setEnabled(false);

    }

    private void setCurrentPaint(){
        currentPaint = new Paint();
        currentPaint.setDither(true);
        currentPaint.setColor(0xFFFFFF00);
        currentPaint.setStyle(Paint.Style.STROKE);
        currentPaint.setStrokeJoin(Paint.Join.ROUND);
        currentPaint.setStrokeCap(Paint.Cap.ROUND);
        currentPaint.setStrokeWidth(3);

    }




    public boolean onTouch(View view, MotionEvent motionEvent) {
        if(motionEvent.getAction() == MotionEvent.ACTION_DOWN){
            currentDrawingPath = new DrawingPath();
            currentDrawingPath.paint = currentPaint;
            currentDrawingPath.path = new Path();
            currentDrawingPath.path.moveTo(motionEvent.getX(), motionEvent.getY());
            currentDrawingPath.path.lineTo(motionEvent.getX(), motionEvent.getY());

        }else if(motionEvent.getAction() == MotionEvent.ACTION_MOVE){
            currentDrawingPath.path.lineTo(motionEvent.getX(), motionEvent.getY());

        }else if(motionEvent.getAction() == MotionEvent.ACTION_UP){
            currentDrawingPath.path.lineTo(motionEvent.getX(), motionEvent.getY());
            drawingSurface.addDrawingPath(currentDrawingPath);

            undoBtn.setEnabled(true);
            redoBtn.setEnabled(false);
        }

        return true;
    }


    public void onClick(View view){
        switch (view.getId()){
            case R.id.colorRedBtn:
                currentPaint = new Paint();
                currentPaint.setDither(true);
                currentPaint.setColor(0xFFFF0000);
                currentPaint.setStyle(Paint.Style.STROKE);
                currentPaint.setStrokeJoin(Paint.Join.ROUND);
                currentPaint.setStrokeCap(Paint.Cap.ROUND);
                currentPaint.setStrokeWidth(3);
            break;
            case R.id.colorBlueBtn:
                currentPaint = new Paint();
                currentPaint.setDither(true);
                currentPaint.setColor(0xFF00FF00);
                currentPaint.setStyle(Paint.Style.STROKE);
                currentPaint.setStrokeJoin(Paint.Join.ROUND);
                currentPaint.setStrokeCap(Paint.Cap.ROUND);
                currentPaint.setStrokeWidth(3);
            break;
            case R.id.colorGreenBtn:
                currentPaint = new Paint();
                currentPaint.setDither(true);
                currentPaint.setColor(0xFF0000FF);
                currentPaint.setStyle(Paint.Style.STROKE);
                currentPaint.setStrokeJoin(Paint.Join.ROUND);
                currentPaint.setStrokeCap(Paint.Cap.ROUND);
                currentPaint.setStrokeWidth(3);
            break;

            case R.id.undoBtn:
                drawingSurface.undo();
                if( drawingSurface.hasMoreUndo() == false ){
                    undoBtn.setEnabled( false );
                }
                redoBtn.setEnabled( true );
            break;

            case R.id.redoBtn:
                drawingSurface.redo();
                if( drawingSurface.hasMoreRedo() == false ){
                    redoBtn.setEnabled( false );
                }

                undoBtn.setEnabled( true );
            break;
            case R.id.saveBtn:
                final Activity currentActivity  = this;
                Handler saveHandler = new Handler(){
                    @Override
                    public void handleMessage(Message msg) {
                        final AlertDialog alertDialog = new AlertDialog.Builder(currentActivity).create();
                        alertDialog.setTitle("Saved 1");
                        alertDialog.setMessage("Your drawing had been saved :)");
                        alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
                                return;
                            }
                        });
                        alertDialog.show();
                    }
                } ;
               new ExportBitmapToFile(this,saveHandler, drawingSurface.getBitmap()).execute();
            break;
        }
    }


    private class ExportBitmapToFile extends AsyncTask<Intent,Void,Boolean> {
        private Context mContext;
        private Handler mHandler;
        private Bitmap nBitmap;

        public ExportBitmapToFile(Context context,Handler handler,Bitmap bitmap) {
            mContext = context;
            nBitmap = bitmap;
            mHandler = handler;
        }

        @Override
        protected Boolean doInBackground(Intent... arg0) {
            try {
                if (!APP_FILE_PATH.exists()) {
                    APP_FILE_PATH.mkdirs();
                }

                final FileOutputStream out = new FileOutputStream(new File(APP_FILE_PATH + "/myAwesomeDrawing.png"));
                nBitmap.compress(Bitmap.CompressFormat.PNG, 90, out);
                out.flush();
                out.close();
                return true;
            }catch (Exception e) {
                e.printStackTrace();
            }
            //mHandler.post(completeRunnable);
            return false;
        }


        @Override
        protected void onPostExecute(Boolean bool) {
            super.onPostExecute(bool);
            if ( bool ){
                mHandler.sendEmptyMessage(1);
            }
        }
    }
}

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.example.SaveDrawing"
      android:versionCode="1"
      android:versionName="1.0">

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <uses-sdk android:minSdkVersion="8" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".SaveDrawing"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity android:name=".DrawingActivity" android:screenOrientation="landscape" ></activity>
        <activity android:name=".drawings.DrawingActivity"/>
    </application>
</manifest>

我的资源管理器中有以下内容。我不太确定我的文件结构是否错误。

enter image description here

谁能帮帮我?我对 java 和 android 编程有点陌生。非常感谢!!! :)

最佳答案

删除 <activity android:name=".DrawingActivity" android:screenOrientation="landscape" ></activity>从你的 list 中,因为没有这样的 Activity 。只有DrawingActivity在您的项目结构中。然后清理构建运行。 另一个可能的问题可能是 Activity 类名称 SaveDrawing在包里。您应该尝试重命名包,更新 list 的相关更改,然后再次尝试运行该应用程序。

关于java - Android 可以执行 Activity 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6990441/

相关文章:

java - 您如何测试 Iterator/ListIterator 是否有效?

java - java util 类中的调试点

java - 在没有 NDK 的 Android 上使用 CMUSphinx

java - 如何添加默认构造函数

java - AS 2.3.3、Gradle 3.3、Java 1.8 无法解析 java.time.format.DateTimeFormatter 的导入;

java - OO方式的游戏设计

android - 应用程序在查询托管解析服务器时崩溃

android - Nexus 7 兼容性问题

java - 捕获图像并仅将它们存储在android中的apk中?

android - 查找Audio.Media项的路径