Подтвердить что ты не робот

Переход активности Android в ListView

Я пытаюсь выполнить следующий переход активности в Android:

enter image description here

В 1 мы видим обычный ListView. Теперь (2), когда я нажимаю палец на элемент ListView и прокручиваю палец влево, все остальные элементы ListView удаляются, за исключением того, на котором мой палец. Если переход завершен, "выбранный" элемент ListView расширяется по экрану и показывает некоторый контент.

Вопрос: возможен ли этот переход с функциями API запаса?

4b9b3361

Ответ 1

Хотя @hasanghaforian технически корректен, подклассификация AdapterView чрезвычайно сложна. Я предлагаю вам пойти с таким подходом. Я включил полный рабочий пример.

  • Поместите представление ListView в relativeLayout
  • OnClick, раздуйте копию рендерера
  • Найти глобальные координаты, где средство визуализации находится во взаимодействии с родительским элементом ListView
  • Добавьте скопированный визуализатор в RelativeLayout (родительский элемент ListView)
  • Анимировать списокView
  • В конце этого оживления анимируйте новый рендерер
  • Profit!
public class MainActivity extends Activity {

    private RelativeLayout layout;
    private ListView listView;
    private MyRenderer selectedRenderer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        layout = new RelativeLayout(this);
        setContentView(layout);
        listView = new ListView(this);
        RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);
        layout.addView(listView, rlp);

        listView.setAdapter(new MyAdapter());
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                // find out where the clicked view sits in relationship to the
                // parent container
                int t = view.getTop() + listView.getTop();
                int l = view.getLeft() + listView.getLeft();

                // create a copy of the listview and add it to the parent
                // container
                // at the same location it was in the listview
                selectedRenderer = new MyRenderer(view.getContext());
                RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(view.getWidth(), view
                        .getHeight());
                rlp.topMargin = t;
                rlp.leftMargin = l;
                selectedRenderer.textView.setText(((MyRenderer) view).textView.getText());
                layout.addView(selectedRenderer, rlp);
                view.setVisibility(View.INVISIBLE);

                // animate out the listView
                Animation outAni = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0f,
                        Animation.RELATIVE_TO_SELF, -1f, Animation.RELATIVE_TO_SELF, 0f,
                        Animation.RELATIVE_TO_SELF, 0f);
                outAni.setDuration(1000);
                outAni.setFillAfter(true);
                outAni.setAnimationListener(new Animation.AnimationListener() {
                    @Override
                    public void onAnimationStart(Animation animation) {
                    }

                    @Override
                    public void onAnimationRepeat(Animation animation) {
                    }

                    @Override
                    public void onAnimationEnd(Animation animation) {
                        ScaleAnimation scaleAni = new ScaleAnimation(1f, 
                                1f, 1f, 2f, 
                                Animation.RELATIVE_TO_SELF, 0.5f,
                                Animation.RELATIVE_TO_SELF, 0.5f);
                        scaleAni.setDuration(400);
                        scaleAni.setFillAfter(true);
                        selectedRenderer.startAnimation(scaleAni);
                    }
                });

                listView.startAnimation(outAni);
            }
        });
    }

    public class MyAdapter extends BaseAdapter {
        @Override
        public int getCount() {
            return 10;
        }

        @Override
        public String getItem(int position) {
            return "Hello World " + position;
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            MyRenderer renderer;
            if (convertView != null)
                renderer = (MyRenderer) convertView;
            else
                renderer = new MyRenderer(MainActivity.this);
            renderer.textView.setText(getItem(position));
            return renderer;
        }
    }

    public class MyRenderer extends RelativeLayout {

        public TextView textView;

        public MyRenderer(Context context) {
            super(context);
            setPadding(20, 20, 20, 20);
            setBackgroundColor(0xFFFF0000);

            RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(
                    RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
            rlp.addRule(CENTER_IN_PARENT);
            textView = new TextView(context);
            addView(textView, rlp);
        }

    }
}

Ответ 2

Если вы нацеливаете JellyBean или выше, вы можете использовать класс ActivityOptions для настройки анимации запуска активности.

Ниже приведен псевдокод для этого:

Intent i = //the intent for the new activity
View v = //the selected list item
Bundle bundle = ActivityOptions.makeScaleUpAnimation(v, 0, 0, v.getWidth(), v.getHeight()).toBundle();
startActivity(i, bundle);

Ответ 3

Недостатком стандарта ListView является отсутствие хорошей физики (и способность ее изменять). Поэтому, если вы хотите изменить его, вам просто нужно реализовать свой собственный вид. Вы должны расширить подкласс класса ViewGroup, который AdapterView, так что AdaptView будет вашим полу-списком.

Подробнее

  • Установите адаптер для вашего адаптера в setAdapter(Adapter adapter).

  • Переопределить onLayout метод для добавления элементов в ваш AdapterView. Вы должны измерять и добавлять элементы как childview в правильные (ваш AdapterView).

  • Переопределить onTouchEvent(), чтобы ваш список мог прокручиваться. И здесь вы должны делать все магические заклинания! Когда пользователь соприкасается с предметом, список должен прокручиваться, а когда он/она коснется горизонтально, вам нужно изменить положение других элементов списка, и когда пользователь берет свой палец с экрана, вы должны решить, что другие предметы будут видимыми или выбранный элемент должен быть расширен.

Пример

Создание собственного 3D-списка (и часть 2 этой статьи) имеет хорошую демонстрацию того, что я показываю для вас. Цель 3D-список. Вы можете видеть более подробную информацию, коды фрагментов и полный код. Хотя вы должны изменить его onTouchEvent(), чтобы достичь желаемого.

Примечание. Вы можете сделать это даже в API1.

Я надеюсь, что это поможет вам!

Ответ 4

В вашем xml файле под списком ListView возьмите еще одно линейное расписание/относительный макет и спроектируйте его в соответствии с вашими потребностями, но убедитесь, что его видимость должна исчезнуть. когда вы нажимаете на элемент списка, заполняете его своим контентом и делаете все это при длительном нажатии. для анимации, масштабируйте его влево.

Ответ 5

когда evr u нажимает на этот элемент списка, он должен вызывать анимацию для этого, вам нужно пройти анимацию. В этой анимации вы должны ее спроектировать и в тех анимациях, если u r с помощью imagesmeans go throug 9 патч-изображений