在清单中找不到类

时间:2015-10-21 11:52:16

标签: android eclipse

我在此Android: Free Croping of Image使用此代码裁剪图像。我以这种方式实现它。但是,当我运行应用程序和裁剪图像时,我得到错误: 我在清单中声明它。

10-21 15:09:21.556: E/AndroidRuntime(25037): FATAL EXCEPTION: main
10-21 15:09:21.556: E/AndroidRuntime(25037): android.content.ActivityNotFoundException: Unable to find explicit activity class {android.app.cut/android.app.cut.SomeView$CropActivity}; have you declared this activity in your AndroidManifest.xml?

主要代码:

public class main extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

}

@Override
protected void onResume() {
    super.onResume();
    setContentView(new SomeView(main.this));
}}

someview class:

public class SomeView extends View implements OnTouchListener {
private Paint paint;
public static List<Point> points;
int DIST = 2;
boolean flgPathDraw = true;

Point mfirstpoint = null;
boolean bfirstpoint = false;

Point mlastpoint = null;






Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
        R.drawable.ic_launcher);
Context mContext;

public SomeView(Context c) {
    super(c);

    mContext = c;
    setFocusable(true);
    setFocusableInTouchMode(true);

    paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    paint.setStyle(Paint.Style.STROKE);
    paint.setPathEffect(new DashPathEffect(new float[] { 10, 20 }, 0));
    paint.setStrokeWidth(5);
    paint.setColor(Color.WHITE);

    this.setOnTouchListener(this);
    points = new ArrayList<Point>();

    bfirstpoint = false;
}

public SomeView(Context context, AttributeSet attrs) {
    super(context, attrs);
    mContext = context;
    setFocusable(true);
    setFocusableInTouchMode(true);

    paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    paint.setStyle(Paint.Style.STROKE);
    paint.setStrokeWidth(2);
    paint.setColor(Color.WHITE);

    this.setOnTouchListener(this);
    points = new ArrayList<Point>();
    bfirstpoint = false;

}

public void onDraw(Canvas canvas) {
    canvas.drawBitmap(bitmap, 0, 0, null);

    Path path = new Path();
    boolean first = true;

    for (int i = 0; i < points.size(); i += 2) {
        Point point = points.get(i);
        if (first) {
            first = false;
            path.moveTo(point.x, point.y);
        } else if (i < points.size() - 1) {
            Point next = points.get(i + 1);
            path.quadTo(point.x, point.y, next.x, next.y);
        } else {
            mlastpoint = points.get(i);
            path.lineTo(point.x, point.y);
        }
    }
    canvas.drawPath(path, paint);
   }

public boolean onTouch(View view, MotionEvent event) {
    // if(event.getAction() != MotionEvent.ACTION_DOWN)
    // return super.onTouchEvent(event);

    Point point = new Point();
    point.x = (int) event.getX();
    point.y = (int) event.getY();

    if (flgPathDraw) {

        if (bfirstpoint) {

            if (comparepoint(mfirstpoint, point)) {
                // points.add(point);
                points.add(mfirstpoint);
                    flgPathDraw = false;
                                    showcropdialog();
            } else {
                points.add(point);
            }
        } else {
            points.add(point);
        }

        if (!(bfirstpoint)) {

            mfirstpoint = point;
            bfirstpoint = true;
        }
    }

    invalidate();
    Log.e("Hi  ==>", "Size: " + point.x + " " + point.y);

    if (event.getAction() == MotionEvent.ACTION_UP) {
        Log.d("Action up*******~~~~~~~>>>>", "called");
        mlastpoint = point;
        if (flgPathDraw) {
            if (points.size() > 12) {
                if (!comparepoint(mfirstpoint, mlastpoint)) {
                    flgPathDraw = false;
                    points.add(mfirstpoint);
                    showcropdialog();
                }
            }
        }
    }

    return true;
}

private boolean comparepoint(Point first, Point current) {
    int left_range_x = (int) (current.x - 3);
    int left_range_y = (int) (current.y - 3);

    int right_range_x = (int) (current.x + 3);
    int right_range_y = (int) (current.y + 3);

    if ((left_range_x < first.x && first.x < right_range_x)
            && (left_range_y < first.y && first.y < right_range_y)) {
        if (points.size() < 10) {
            return false;
        } else {
            return true;
        }
    } else {
        return false;
    }

}

public void fillinPartofPath() {
    Point point = new Point();
    point.x = points.get(0).x;
    point.y = points.get(0).y;

    points.add(point);
    invalidate();
}

public void resetView() {
    points.clear();
    paint.setColor(Color.WHITE);
    paint.setStyle(Style.STROKE);
    flgPathDraw = true;
    invalidate();
}

private void showcropdialog() {
    DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            Intent intent;
            switch (which) {
            case DialogInterface.BUTTON_POSITIVE:
                // Yes button clicked
                // bfirstpoint = false;

                intent = new Intent(mContext, CropActivity.class);
                intent.putExtra("crop", true);
                mContext.startActivity(intent);
                break;

            case DialogInterface.BUTTON_NEGATIVE:
                // No button clicked

                intent = new Intent(mContext, CropActivity.class);
                intent.putExtra("crop", false);
                mContext.startActivity(intent);

                bfirstpoint = false;
                // resetView();

                break;
            }
        }
    };

    AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
    builder.setMessage("Do you Want to save Crop or Non-crop image?")
            .setPositiveButton("Crop", dialogClickListener)
            .setNegativeButton("Non-crop", dialogClickListener).show()
            .setCancelable(false);
}}

作物类:

 public class CropActivity extends Activity {

        ImageView compositeImageView;
        boolean crop;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.someview);

            Bundle extras = getIntent().getExtras();
            if (extras != null) {
                crop = extras.getBoolean("crop");
            }
            int widthOfscreen = 0;
            int heightOfScreen = 0;

            DisplayMetrics dm = new DisplayMetrics();
            try {
                getWindowManager().getDefaultDisplay().getMetrics(dm);
            } catch (Exception ex) {
            }
            widthOfscreen = dm.widthPixels;
            heightOfScreen = dm.heightPixels;

            compositeImageView = (ImageView) findViewById(R.id.someview);

            Bitmap bitmap2 = BitmapFactory.decodeResource(getResources(),
                    R.drawable.ic_launcher);

            Bitmap resultingImage = Bitmap.createBitmap(widthOfscreen,
                    heightOfScreen, bitmap2.getConfig());

            Canvas canvas = new Canvas(resultingImage);
            Paint paint = new Paint();
            paint.setAntiAlias(true);

            Path path = new Path();
            for (int i = 0; i < SomeView.points.size(); i++) {
                path.lineTo(SomeView.points.get(i).x, SomeView.points.get(i).y);
            }
            canvas.drawPath(path, paint);
            if (crop) {
                paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));

            } else {
                paint.setXfermode(new PorterDuffXfermode(Mode.SRC_OUT));
            }
            canvas.drawBitmap(bitmap2, 0, 0, paint);
            compositeImageView.setImageBitmap(resultingImage);
        }
    }

清单:

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity
        android:name=".main"
        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=".CropActivity"
        android:label="@string/app_name" >

    </activity>

    <activity
        android:name=".SomeView"
        android:label="@string/app_name" >

    </activity>
</application>

2 个答案:

答案 0 :(得分:2)

您的错误表示未找到活动CropActivity。如果仔细查看错误,您会发现您尝试启动的活动是android.app.cut.SomeView$CropActivity。但是在您的清单中,您为作物活动的路径声明了.CropActivity

因此,您应该将CropActivity移动到与其他应用相同的包中的自己的文件中,将您的清单中的声明更改为.SomeView.CropActivity

答案 1 :(得分:1)

删除您的清单并重新创建它。那应该解决它。

EG在maven中你只需在项目上进行全新安装,它就会自行创建清单。

相关问题