Я использую стороннюю библиотеку. Это позволяет перетаскивать изображения и масштабировать их при сжатии и вращении. Я пытаюсь реализовать удаление изображения и создал метод, который удаляет изображение, на которое вы наводите палец. Теперь мне просто нужно позвонить. Единственное место, откуда я успешно его вызвал, это onDraw. В идеале я бы назвал это двойным нажатием, потому что пользователь будет долго щелкать по нему, чтобы перетащить его. Но longClick, по-видимому, проще, поэтому я сначала тестировал его. Вот мой код. Прокрутите вниз, чтобы увидеть мой setOnClickListener. Я покажу вам код класса перед setOnClickListener, чтобы дать вам некоторый контекст:
public class PhotoSortrView extends View implements MultiTouchObjectCanvas<PhotoSortrView.Img> {
private ArrayList<Integer> mDrawables = new ArrayList<Integer>();// { R.drawable.m74hubble, R.drawable.catarina, R.drawable.tahiti, R.drawable.sunset, R.drawable.lake };
public void addDrawable(int drawable, Context context){
Resources res = context.getResources();
mDrawables.add(drawable);
mImages.add(new Img(drawable, res));
invalidate();
}
private ArrayList<Img> mImages = new ArrayList<Img>();
private AppUser user;
// --
private MultiTouchController<Img> multiTouchController = new MultiTouchController<Img>(this);
// --
private PointInfo currTouchPoint = new PointInfo();
private boolean mShowDebugInfo = true;
private static final int UI_MODE_ROTATE = 1, UI_MODE_ANISOTROPIC_SCALE = 2;
private int mUIMode = UI_MODE_ROTATE;
// --
private Paint mLinePaintTouchPointCircle = new Paint();
// ---------------------------------------------------------------------------------------------------
public PhotoSortrView(Context context) {
this(context, null);
}
public PhotoSortrView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public PhotoSortrView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context);
}
@SuppressWarnings("deprecation")
private void init(Context context) {
Resources res = context.getResources();
for (int i = 0; i < mDrawables.size(); i++)
mImages.add(new Img(mDrawables.get(i), res));
mLinePaintTouchPointCircle.setColor(Color.YELLOW);
mLinePaintTouchPointCircle.setStrokeWidth(5);
mLinePaintTouchPointCircle.setStyle(Style.STROKE);
mLinePaintTouchPointCircle.setAntiAlias(true);
this.setLongClickable(true);
this.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Toast.makeText(getContext(), "Long Clicked", Toast.LENGTH_SHORT).show();
Log.d("long clicking", "long clicking");
return true;
}
});
}
Я новичок в Android, поэтому, возможно, не совсем понимаю контекст этого библиотечного класса. Я вызываю этот класс в своей деятельности следующим образом:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dressing_room);
photoSorter = new PhotoSortrView(this);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
this.addContentView(photoSorter, params);
Это представление, которое добавляется к этому действию, но оно имеет холст и может добавлять множество перетаскиваемых изображений. Спасибо.
ИЗМЕНИТЬ Я изменил его на
this.setOnTouchListener(new View.OnTouchListener() {
// @Override
//public boolean onLongClick(View v) {
// Toast.makeText(getContext(), "Long Clicked", Toast.LENGTH_SHORT).show();
// Log.d("long clicking", "long clicking");
// return true;
// }
@Override
public boolean onTouch(View v, MotionEvent event) {
Toast.makeText(getContext(), "Long Clicked", Toast.LENGTH_SHORT).show();
Log.d("long clicking", "long clicking");
return false;
}
});
}
И это работает. Можем ли мы перейти от этого к двойному тапу?
android.view.View.OnLongClickListener;
? - person Shayan Pourvatan   schedule 12.01.2014