5.11.2014 / 21:58 | |
andreyKorotayev Пользователь Сейчас: Offline
Имя: Андрей Откуда: Запорожье Регистрация: 19.05.2014
| Народ кто то реализовывал в своих программах перетаскивание элементов ListView?Помогите плиз .Нашел одну библиотеку ну не как не выходит ее запилить в мой проект.Она не подходит.Например тот же Photoshop touch,управление порядком отображения слоев
|
5.11.2014 / 22:09 | |
aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| andreyKorotayev, в любом случае всё сводится к разбору примеров библиотеки и хоть небольшому чтению документации. Что за библиотека? И что не получается?
__________________
let live |
5.11.2014 / 22:16 | |
andreyKorotayev Пользователь Сейчас: Offline
Имя: Андрей Откуда: Запорожье Регистрация: 19.05.2014
| Библиотека drag-sort-listview-master Автор Carl Bauer
|
5.11.2014 / 22:18 | |
andreyKorotayev Пользователь Сейчас: Offline
Имя: Андрей Откуда: Запорожье Регистрация: 19.05.2014
| И как я понял в ней можно выводить только на полный экран-listActivity , да и компилятор жестко ругаеться
|
5.11.2014 / 22:25 | |
Naik Пользователь Сейчас: Offline
Имя: %name% Регистрация: 14.03.2010
| andreyKorotayev, я делал так. В Activity это @Override
public boolean dispatchTouchEvent(MotionEvent event) {
if (touchHandleListener != null) {
touchHandleListener.onActivityTouch(event);
}
return super.dispatchTouchEvent(event);
}
public void setTouchHandleListener(TouchHandleListener l) {
touchHandleListener = l;
}
public interface TouchHandleListener {
void onActivityTouch(MotionEvent event);
}
И класс-контроллер Открыть спойлер Закрыть спойлер package ua.naiksoftware.musicstream;
import android.app.Activity;
import android.support.v4.app.Fragment;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.animation.AnimationUtils;
import android.widget.FrameLayout;
import android.widget.GridView;
import android.widget.ImageView;
import java.util.ArrayList;
import android.view.animation.Animation;
import android.graphics.Bitmap;
import android.util.Log;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.graphics.Rect;
import android.widget.Toast;
public class DragController implements MainActivity.TouchHandleListener {
private static final String tag = DragController.class.getName();
private Fragment fragment;
private StationView stationView;
private View draggedView;
private ImageView imageDragView;// Временное изображение, которое следует за пальцем при D&D
private ImageView dropContainer;
private ViewGroup dragContainer;
private GridView gridView;
private StationAdapter gridAdapter;
private static final FrameLayout.LayoutParams dragParams = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
private static boolean drag;
private static boolean drop;
private static Animation animClear;
public DragController(Fragment fragment, StationAdapter gridAdapter) {
this.fragment = fragment;
this.gridAdapter = gridAdapter;
Activity activity = fragment.getActivity();
dropContainer = (ImageView) activity
.findViewById(R.id.fragment_stationsDeleteBar);
dragContainer = (ViewGroup) activity
.findViewById(R.id.fragment_stationsDragContainer);
gridView = (GridView) activity
.findViewById(R.id.fragment_stationsGridView);
imageDragView = new ImageView(activity);
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
imageDragView.setLayoutParams(lp);
animClear = AnimationUtils.loadAnimation(activity, R.anim.clear);
animClear.setAnimationListener(animListener);
((MainActivity) activity).setTouchHandleListener(this);
}
@Override
public void onActivityTouch(MotionEvent event) {
//toast("onActivityTouch(" + event.getAction() + ") " + drag);
if (drag) {
int[] loc = new int[2];
dropContainer.getLocationOnScreen(loc);
Rect rectDrop = new Rect(loc[0], loc[1], loc[0] + dropContainer.getWidth(), loc[1] + dropContainer.getHeight());
dragContainer.getLocationOnScreen(loc);
final int rawX = (int) event.getX();
final int rawY = (int) event.getY();
int x = rawX - loc[0] - imageDragView.getWidth() / 2;
int y = rawY - loc[1] - imageDragView.getHeight() / 2;
int act = event.getAction();
if (act == MotionEvent.ACTION_DOWN || act == MotionEvent.ACTION_MOVE) {
// If setTranslation, animation not working.
//dragView.setTranslationX(x);
//dragView.setTranslationY(y);
if (x + imageDragView.getWidth() > dragContainer.getWidth()) {
x = dragContainer.getWidth() - imageDragView.getWidth();
} else if (x < 0) {
x = 0;
}
dragParams.leftMargin = x;
dragParams.topMargin = y;
imageDragView.setLayoutParams(dragParams);
if (rectDrop.contains(rawX, rawY)) {
if (!drop) {
dropContainer.getBackground().setColorFilter(Color.RED, PorterDuff.Mode.MULTIPLY);
drop = true;
}
} else {
dropContainer.getBackground().clearColorFilter();
drop = false;
}
//toast("new coords = " + dragView.getTranslationX() + ", " + dragView.getTranslationY());
} else {
if (rectDrop.contains(rawX, rawY)) {
drag = false;
imageDragView.startAnimation(animClear);
} else {
imageDragView.clearColorFilter();
dragContainer.removeView(imageDragView);
dropContainer.setVisibility(View.GONE);
drag = false;
if (draggedView != null) {
draggedView.setVisibility(View.VISIBLE);
}
StationView.allowNewDrag();
}
}
}
}
public void startDrag(StationView stationView) {
this.stationView = stationView;
draggedView = (View) stationView.getParent();
dropContainer.setVisibility(View.VISIBLE);
Bitmap dragBitmap = getViewBitmap(draggedView);
imageDragView.setImageBitmap(dragBitmap);
imageDragView.setColorFilter(Color.RED, PorterDuff.Mode.LIGHTEN);
draggedView.setVisibility(View.INVISIBLE);
dragContainer.addView(imageDragView);
drag = true;
}
private void removeStation(StationInfo info) {
ArrayList<StationInfo> list = gridAdapter.getArrayList();
if (list.remove(info)) {
gridView.setAdapter(new StationAdapter(fragment, list));
}
}
private Animation.AnimationListener animListener = new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation anim) {
}
@Override
public void onAnimationEnd(Animation anim) {
if (anim == animClear) {
removeStation(stationView.getStationInfo());
imageDragView.clearColorFilter();
dragContainer.removeView(imageDragView);
dropContainer.setVisibility(View.GONE);
drop = false;
StationView.allowNewDrag();
}
}
@Override
public void onAnimationRepeat(Animation anim) {
}
};
private static Bitmap getViewBitmap(View v) {
//v.clearFocus();
//v.setPressed(false);
boolean willNotCache = v.willNotCacheDrawing();
v.setWillNotCacheDrawing(false);
// Reset the drawing cache background color to fully transparent
// for the duration of this operation
int color = v.getDrawingCacheBackgroundColor();
v.setDrawingCacheBackgroundColor(0);
if (color != 0) {
v.destroyDrawingCache();
}
v.buildDrawingCache();
Bitmap cacheBitmap = v.getDrawingCache();
if (cacheBitmap == null) {
Log.e(tag, "failed getViewBitmap(" + v + ")", new RuntimeException());
return null;
}
Bitmap bitmap = Bitmap.createBitmap(cacheBitmap);
// Restore the view
v.destroyDrawingCache();
v.setWillNotCacheDrawing(willNotCache);
v.setDrawingCacheBackgroundColor(color);
return bitmap;
}
private void toast(String msg) {
//filelog.Log.d(tag, msg);
Toast.makeText(fragment.getActivity(), msg, Toast.LENGTH_SHORT).show();
}
}
Как работает можно посмотреть по длинному нажатию на станцию здесь http://dbwap.ru/7843841Только это GridView. В API есть спец. классы для такого, но только в новых версиях ОС Изменено Naik (5.11 / 22:27) (всего 3 раза) |
5.11.2014 / 22:37 | |
andreyKorotayev Пользователь Сейчас: Offline
Имя: Андрей Откуда: Запорожье Регистрация: 19.05.2014
| С этим drag n drop мозг закипает, психану и на канвасе сделаю из графики
|
6.11.2014 / 01:17 | |
eNvisible Пользователь Сейчас: Offline
Имя: **** Откуда: В России. Регистрация: 19.07.2014
| andreyKorotayev, Такая же ерунда. Делал тут меню для игры на лэйаутах... В итоге плюнул и на канве переделал) Не скажу, что совсем в них не разбераюсь, но эти разметки меня дико напрягают |
7.11.2014 / 13:27 | |
swank Пользователь Сейчас: Offline
Имя: Виталий Откуда: Киев Регистрация: 07.09.2012
| Вдохновленный phprunner'ом я пошол искать другие сервера т.к. На phprunnere даже johncms норм не запустился, а виной тому автозагрузка классов spl_autoload_registr() В маркете бесплатного, хорошего я нечего не нашол, решил сам попробовать собрать, nginx легко запустил, а вот php не как не могу запустить, запускаю такой командой ./data/data/ua.the-swank.nginxserver/components/php/sbin/php-cgi -a -b 127.0.0.1:9009 -c /data/data/ua.the-swank.nginxserver/components/php/conf/php.ini
Ошибки не какие не выскакивают но и в деспечере задач php-cgi нету Подскажите что не так делаю? |
7.11.2014 / 15:50 | |
Naik Пользователь Сейчас: Offline
Имя: %name% Регистрация: 14.03.2010
| swank, в каком еще диспетчере? ps | grep php |
7.11.2014 / 17:04 | |
Virus-ON Пользователь Сейчас: Offline
Имя: Макс Откуда: Чернигов Регистрация: 13.10.2011
| swank (07.11.2014/13:27) Вдохновленный phprunner'ом я пошол искать другие сервера т.к. На phprunnere даже johncms норм не запустился, а виной тому автозагрузка классов spl_autoload_registr() В маркете бесплатного, хорошего яМожет попробуешь руками собрать(пых и всё остальное? Авось поможет. [url= http://m.habrahabr.ru/company/xakep/blog/208518/ ]Тыц[/url] И в каком диспечере, присоеденюсь к вопросу. Изменено Virus-ON (7.11 / 17:06) (всего 2 раза) |