2013-12-26 3 views
1

Я разрабатываю приложение, где мне нужно обрезать изображение. Но это прорисовывание изображения должно происходить только в моей деятельности, поэтому я не могу использовать концепцию обрезания изображения по умолчанию для андроида, где изображение будет отображаться на другом представлении, где пользователь может обрезать.Как разработать настраиваемый прямоугольник обрезки в android?

Что мне нужно - это создать собственный прямоугольник обрезки изображения.

Я пробую это от долгого, но не повезло. Был бы рад, если какой-нибудь орган может помочь.

Благодаря

+0

http://stackoverflow.com/questions/18463102/crop-an-image-by-passing-the-image -file-путь-в-андроид. можно найти больше примеров в stackoverflow, и этот http://stackoverflow.com/questions/10776438/crop-an-image-when-selected-from-gallery-in-android и этот http://stackoverflow.com/questions/2085003/how-to-select-and-crop-an-image-in-android – Raghunandan

+0

https://github.com/rajeshcp/Android-Crop-Tool/ один инструмент обрезки, который я сделал для одного из моих проектов – Triode

+0

Здравствуйте, Rajesh, Спасибо для совместного использования, пожалуйста, сообщите мне, как вы обрезали изображение после изображения, отображаемого в обрезке? (CroppingTool) findViewById (R.id.crop_tool)). SetmTargetImage (BitmapFactory.decodeResource (getResources(), R.drawable.arrahman)); – krishnendra

ответ

6

мой mainactivity ..

public class MainActivity extends Activity { 

private DragRectView view; 
private ImageView original; 

// private ImageView croppedImage; 

/** 
* 
*/ 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    view = (DragRectView) findViewById(R.id.dragRect); 
    original = (ImageView) findViewById(R.id.image); 
    // croppedImage = (ImageView) findViewById(R.id.crop_image); 
    if (null != view) { 
     view.setOnUpCallback(new DragRectView.OnUpCallback() { 
      @Override 
      public void onRectFinished(final Rect rect) { 
       Toast.makeText(
         getApplicationContext(), 
         "Rect is (" + rect.left + ", " + rect.top + ", " 
           + rect.right + ", " + rect.bottom + ")", 
         Toast.LENGTH_LONG).show(); 
       Bitmap bitmap1 = Bitmap.createScaledBitmap(
         ((BitmapDrawable) original.getDrawable()) 
           .getBitmap(), original.getWidth(), original 
           .getHeight(), false); 
       System.out.println(rect.height() + " " 
         + bitmap1.getHeight() + "  " + rect.width() 
         + " " + bitmap1.getWidth()); 
       if (rect.height() <= bitmap1.getHeight() 
         && rect.width() <= bitmap1.getWidth()) { 
        Bitmap bitmap = Bitmap.createBitmap(bitmap1, 
          view.getLeft(), view.getTop(), view.getWidth(), 
          view.getHeight()); 
        System.out 
          .println("MainActivity.onCreate(...).new OnUpCallback() {...}.onRectFinished() if true"); 
        Intent intent = new Intent(MainActivity.this, 
          CropImageActivity.class); 
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
        intent.putExtra("cropimage", bitmap); 
        startActivity(intent); 
        System.out.println("MainActivity.onCreate() "); 
       } 
      } 
     }); 
    } 
} 
} 

cropImageAcivity ...

public class CropImageActivity extends Activity { 
private ImageView imageView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.crop_image); 
    imageView = (ImageView) findViewById(R.id.crop_image); 
    Intent intent = getIntent(); 
    if (intent != null) { 
     Bundle extras = intent.getExtras(); 
     if (extras != null) { 
      System.out.println("CropImageActivity.onCreate()"); 
      Bitmap bitmap = extras.getParcelable("cropimage"); 
      imageView.setImageBitmap(bitmap); 
     } 
    } 
} 
} 

DragRectangle ...

public class DragRectView extends View { 
private Paint mRectPaint; 

private int mStartX = 0; 
private int mStartY = 0; 
private int mEndX = 0; 
private int mEndY = 0; 
private boolean mDrawRect = false; 
private TextPaint mTextPaint = null; 

private OnUpCallback mCallback = null; 

public interface OnUpCallback { 
    void onRectFinished(Rect rect); 
} 

public DragRectView(final Context context) { 
    super(context); 
    init(); 
} 

public DragRectView(final Context context, final AttributeSet attrs) { 
    super(context, attrs); 
    init(); 
} 

public DragRectView(final Context context, final AttributeSet attrs, 
     final int defStyle) { 
    super(context, attrs, defStyle); 
    init(); 
} 

/** 
* Sets callback for up 
* 
* @param callback 
*   {@link OnUpCallback} 
*/ 
public void setOnUpCallback(OnUpCallback callback) { 
    mCallback = callback; 
} 

/** 
* Inits internal data 
*/ 
private void init() { 
    mRectPaint = new Paint(); 
    mRectPaint.setColor(Color.GREEN); 
    mRectPaint.setStyle(Paint.Style.STROKE); 
    mRectPaint.setStrokeWidth(5); 

    mTextPaint = new TextPaint(); 
    mTextPaint.setColor(Color.MAGENTA); 
    mTextPaint.setTextSize(20); 
} 

@Override 
public boolean onTouchEvent(final MotionEvent event) { 

    switch (event.getAction()) { 
    case MotionEvent.ACTION_DOWN: 
     mDrawRect = false; 
     mStartX = (int) event.getX(); 
     mStartY = (int) event.getY(); 
     invalidate(); 
     break; 

    case MotionEvent.ACTION_MOVE: 
     final int x = (int) event.getX(); 
     final int y = (int) event.getY(); 
     if (!mDrawRect || Math.abs(x - mEndX) > 5 
       || Math.abs(y - mEndY) > 5) { 
      mEndX = x; 
      mEndY = y; 
      invalidate(); 
     } 
     mDrawRect = true; 
     break; 

    case MotionEvent.ACTION_UP: 
     if (mCallback != null) { 
      mCallback.onRectFinished(new Rect(Math.min(mStartX, mEndX), 
        Math.min(mStartY, mEndY), Math.max(mEndX, mStartX), 
        Math.max(mEndY, mStartX))); 
     } 
     invalidate(); 
     break; 

    default: 
     break; 
    } 

    return true; 
} 

@Override 
protected void onDraw(final Canvas canvas) { 
    super.onDraw(canvas); 
    if (mDrawRect) { 
     canvas.drawRect(Math.min(mStartX, mEndX), Math.min(mStartY, mEndY), 
       Math.max(mEndX, mStartX), Math.max(mEndY, mStartY), 
       mRectPaint); 
     canvas.drawText(
       " (" + Math.abs(mStartX - mEndX) + ", " 
         + Math.abs(mStartY - mEndY) + ")", 
       Math.max(mEndX, mStartX), Math.max(mEndY, mStartY), 
       mTextPaint); 
    } 
} 
} 

расположение mainactvity

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/root" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@android:color/background_dark" 
android:orientation="vertical" 
android:weightSum="2" > 

<ImageView 
    android:id="@+id/image" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:scaleType="fitXY" 
    android:src="@drawable/image" /> 

<com.afbb.imagecrop.DragRectView 
    android:id="@+id/dragRect" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

<!-- 
    <ImageView 
    android:id="@+id/crop_image" 
    android:layout_width="fill_parent" 
    android:layout_height="match_parent" 
    android:layout_weight="1" 
    android:scaleType="fitXY" 
    android:src="@drawable/image" /> 
--> 

</RelativeLayout> 

расположение cropactivity

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

<ImageView 
    android:id="@+id/crop_image" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:src="@drawable/ic_launcher" /> 

</FrameLayout> 

это может помочь ...

+1

Привет, спасибо, вы можете поделиться своим полным проектом с макетами? – krishnendra

+1

Все это идеально, но оно не отображает изображение обрезки в класс урожая. пожалуйста, возьми меня за это. Спасибо –

+0

Очень хорошо! Большое спасибо. – Oh2

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