0

i used this code here Android: Free Croping of Image to crop an image. i implemented it in this way. but when i run app and crop image i t got error: I declare it in manifest.

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?

main code:

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);
}}

crop class:

 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);
        }
    }

manifest:

<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>
Community
  • 1
  • 1
sara sara
  • 47
  • 9

2 Answers2

2

Your error say that the activity CropActivity is not find. If you look closely to the error you will see that the activity you try to launch is android.app.cut.SomeView$CropActivity. But in your manifest you declared .CropActivity for the path of the crop activity.

So you should either move CropActivity in his own file in the same package as the other app OR change the declaration in your manifest to .SomeView.CropActivity.

sonic
  • 1,894
  • 1
  • 18
  • 22
1

Delete your manifest and recreate it. That should fix it.

EG in maven you just do a clean install on the project and it will re create the manifest on its own.

StackFlowed
  • 6,664
  • 1
  • 29
  • 45