2015-10-21 2 views
0

Я использовал этот код здесь 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 класс: класс

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> 
+0

очистить projext и перестроить его. –

+0

Вы добавили «.SomeView» в Menifest. Этот класс не является вашим классом активности. Удалите его из Menifest.

+0

это класс деятельности. вы можете видеть в моем вопросе, я пишу его как активность. –

ответ

1

Удалите манифест и заново создайте его. Это должно исправить это.

EG в maven вы просто выполняете чистую установку на проекте, и он будет создавать манифест самостоятельно.

+1

спасибо. переименование имени пакета решения проблемы –

2

Ваша ошибка говорит, что деятельность CropActivity не найдена. Если вы посмотрите внимательно на ошибку, вы увидите, что действие, которое вы пытаетесь запустить, - android.app.cut.SomeView$CropActivity. Но в вашем манифесте вы указали .CropActivity для пути активности урожая.

Таким образом, вы должны либо двигаться CropActivity в своем собственном файле в том же пакете, как и другие приложения ИЛИ изменить объявление в манифесте к .SomeView.CropActivity.

+0

все они в одном пакете. –

+0

@sarasara, но есть ли они в отдельных файлах? – Klotor

+0

Нет, они находятся в одном пакете и в том же файле. –

Смежные вопросы