2013-03-31 5 views
4

У меня есть ImageView, холст, и кнопка .. при нажатии кнопки растровое получает нарисованы на холстеПеремещение растрового изображения на холсте

Я хочу, чтобы переместить этот точечный рисунок с помощью моего onTouch (перетащить растрового изображения в где угодно на холсте).

 s.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, 
        View v, int position, long id) { 
      Bitmap workingBitmap = Bitmap.createBitmap(currentBitmap); 
      workingBitmap = Bitmap.createBitmap(workingBitmap); 
      Canvas c = new Canvas(workingBitmap); 
      brightBitmap = BitmapFactory.decodeResource(getResources(), sIds.mSmileyIds[position], null); 
      brightBitmap = Bitmap.createScaledBitmap(brightBitmap, 100, 100, false); 
      chosenSmiley = brightBitmap; 
       if (chosenSmiley != null) { 
        try { 
        c.drawBitmap(chosenSmiley, posX, posY, null); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
       iv.setImageBitmap(workingBitmap); 
       } 

     public boolean onTouchEvent(MotionEvent event) { 
      int eventaction = event.getAction(); 

      switch (eventaction) { 
       case MotionEvent.ACTION_DOWN: 
        // finger touches the screen 
        break; 

       case MotionEvent.ACTION_MOVE: 
        // finger moves on the screen 
        lastX = (int) event.getX(); 
        lastY = (int) event.getY(); 
        Log.e("my xname", lastX + " Coords of lastX"); 
        Log.e("my xname", lastY + " Coords of lastY"); 
        brightBitmap = Bitmap.createScaledBitmap(brightBitmap, lastX, lastY, false); 
        break; 

       case MotionEvent.ACTION_UP: 
        // finger leaves the screen 
        break; 
      } 

      // tell the system that we handled the event and no further processing is required 
      return true; 
     } 

     }); 

это мой текущий код, битовая карта будет создаваться на 0,0, но я не могу перетащить его и т.д ..

+0

У вас есть кнопка при нажатии на раздаточный изображение. Затем переместите изображение пальцем. Это то, что вы ищете? – Raghunandan

ответ

6
public class MainActivity extends Activity 
{ 
    @Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    DrawingView dv = new DrawingView(this); 
    setContentView(dv); 
} 

class DrawingView extends View{ 
Bitmap bitmap; 

float x,y; 

public DrawingView(Context context) 
{ 
super(context); 
bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher); 
} 


public boolean onTouchEvent(MotionEvent event) 
{ 

switch(event.getAction()) 
    { 
    case MotionEvent.ACTION_DOWN: { 

    } 
    break; 

    case MotionEvent.ACTION_MOVE: 
    { 
     x=(int)event.getX(); 
     y=(int)event.getY(); 

invalidate(); 
} 

break; 
    case MotionEvent.ACTION_UP: 

     x=(int)event.getX(); 
     y=(int)event.getY(); 
     System.out.println(".................."+x+"......"+y); //x= 345 y=530 
     invalidate(); 
    break; 
    } 
    return true; 
} 

@Override 
public void onDraw(Canvas canvas) 
{ 
Paint paint = new Paint(); 
paint.setStyle(Paint.Style.FILL); 
paint.setColor(Color.CYAN); 
canvas.drawBitmap(bitmap, x, y, paint); //originally bitmap draw at x=o and y=0 
} 
} 
} 

В звездной битовой карты рисовать в точке х = 0 и у = 0; При перетаскивании x и y изменения вызывают inavlidate для обновления drate. При касании вверх потяните растровое изображение в положение перетаскивания x и y и вызовите invalidate, чтобы обновить дро.

Растровое изображение, изображенное на рисунке x = 0 y = 0. при перетаскивании // x = 345 y = 530. Получившийся щелчок привязан.

Вам нужно убедиться, что ваше изображение не похоже на выход из экрана на краях экрана. Проверьте, находится ли x в пределах ширины экрана - битмапшина и y меньше, чем экранирование - битмаф. Я не включил эти условия в код.

enter image description here

EDIT:

 setContentView(R.layout.main);  
     LinearLayout ll = (LinearLayout) findViewById(R.id.ll); 
     DrawingView dv= new DrawingView(this); 
     ll.addView(dv); 
+0

вы задаете размер представления. Вышеупомянутая высота и ширина экрана. Я могу иметь другие элементы ui и минимизировать пространство рисования холста. – Raghunandan

+0

вы можете установить свой макет с помощью setContentView (R.layout.main); Теперь определите макет внутри main.xml, скажем, линейный макет. установите его ширину и высоту. Добавьте чертеж в макет. – Raghunandan

+0

вы можете использовать свой палец, чтобы перетащить и разблокировать растровое изображение, нарисованное на этом месте. Вместо просмотра изображения на клике нарисуйте изображение на холсте. – Raghunandan