【问题标题】:Drag and drop images in gridview in android在android的gridview中拖放图像
【发布时间】:2012-06-01 07:33:36
【问题描述】:

我正在开发一个示例 android 应用程序来了解 android 中的拖放。在应用程序启动时,我在网格视图上显示了一些图像。现在我需要一次将一个图像拖到另一个位置。将图像放在另一个图像上后,图像应该交换位置。我怎样才能实现它?请指导/帮助我。

【问题讨论】:

    标签: android drag-and-drop android-imageview android-gridview


    【解决方案1】:

    您可以使用 thquinn 的 DraggableGridView 轻松实现此目的

    您可以添加自定义布局

    public class DraggableGridViewSampleActivity extends Activity {
        static Random random = new Random();
        static String[] words = "the of and a to in is be that was he for it with as his I on have at by not they this had are but from or she an which you one we all were her would there their will when who him been has more if no out do so can what up said about other into than its time only could new them man some these then two first may any like now my such make over our even most me state after also made many did must before back see through way where get much go well your know should down work year because come people just say each those take day good how long Mr own too little use US very great still men here life both between old under last never place same another think house while high right might came off find states since used give against three himself look few general hand school part small American home during number again Mrs around thought went without however govern don't does got public United point end become head once course fact upon need system set every war put form water took".split(" ");
        DraggableGridView dgv;
        Button button1, button2;
        ArrayList<String> poem = new ArrayList<String>();
    
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            dgv = ((DraggableGridView)findViewById(R.id.vgv));
            button1 = ((Button)findViewById(R.id.button1));
            button2 = ((Button)findViewById(R.id.button2));
    
            setListeners();
        }
        private void setListeners()
        {
            dgv.setOnRearrangeListener(new OnRearrangeListener() {
                public void onRearrange(int oldIndex, int newIndex) {
                    String word = poem.remove(oldIndex);
                    if (oldIndex < newIndex)
                        poem.add(newIndex, word);
                    else
                        poem.add(newIndex, word);
                }
            });
            dgv.setOnItemClickListener(new OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> arg0, View view, int position, long arg3) {
                    Toast.makeText(getApplicationContext(), "On clicked" +position, Toast.LENGTH_SHORT).show();
                    dgv.removeViewAt(position);
                    poem.remove(position);
                }
            });
            button1.setOnClickListener(new OnClickListener() {
                public void onClick(View arg0) {
                    String word = words[random.nextInt(words.length)];
                    addView();
                    poem.add(word);
                }
            });
            button2.setOnClickListener(new OnClickListener() {
                public void onClick(View arg0) {
                    String finishedPoem = "";
                    for (String s : poem)
                        finishedPoem += s + " ";
                    new AlertDialog.Builder(DraggableGridViewSampleActivity.this)
                    .setTitle("Here's your poem!")
                    .setMessage(finishedPoem).show();
                }
            });
        }
    
        public void addView()
        {
    
            LayoutParams mLayoutParams= new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    
            LinearLayout mLinearLayout= new LinearLayout(DraggableGridViewSampleActivity.this);
            mLinearLayout.setOrientation(LinearLayout.VERTICAL);
            mLinearLayout.setGravity(Gravity.CENTER_HORIZONTAL);
    
            ImageView mImageView = new ImageView(DraggableGridViewSampleActivity.this);
    
            if(dgv.getChildCount()%2==0)
                mImageView.setImageResource(R.drawable.child1);
            else
                mImageView.setImageResource(R.drawable.child2);
    
            mImageView.setScaleType(ImageView.ScaleType.FIT_XY);
            mImageView.setLayoutParams(mLayoutParams);
    
            mImageView.setId(dgv.getChildCount());
    
            mImageView.setOnTouchListener(new OnTouchListener() {
    
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    // TODO Auto-generated method stub
                    Toast.makeText(getApplicationContext(), v.getId()+"clicked ", Toast.LENGTH_SHORT).show();
                    return dgv.onTouch(v, event);
                }
            });
    
    
                TextView mTextView = new TextView(DraggableGridViewSampleActivity.this);
    
                mTextView.setLayoutParams(mLayoutParams);
    
                mTextView.setOnTouchListener(new OnTouchListener() {
    
                    @Override
                    public boolean onTouch(View v, MotionEvent event) {
                        // TODO Auto-generated method stub
                        Toast.makeText(getApplicationContext(), v.getId()+"clicked text ", Toast.LENGTH_SHORT).show();
                        return dgv.onTouch(v, event);
                    }
                });
    
                TextView mTextViewLabel = new TextView(DraggableGridViewSampleActivity.this);
    
                mTextViewLabel.setText(((dgv.getChildCount()+1)+""));
                mTextViewLabel.setLayoutParams(mLayoutParams);
    
                mTextViewLabel.setId(dgv.getChildCount());
    
                mTextViewLabel.setOnTouchListener(new OnTouchListener() {
    
                    @Override
                    public boolean onTouch(View v, MotionEvent event) {
                        Toast.makeText(getApplicationContext(), v.getId()+"clicked text ", Toast.LENGTH_SHORT).show();
                        return dgv.onTouch(v, event);
                    }
                });
    
                mLinearLayout.setTag(mTextViewLabel);
                mLinearLayout.addView(mTextViewLabel);
                mLinearLayout.addView(mImageView);
                mLinearLayout.addView(mTextView);
            dgv.addView(mLinearLayout);
    
        }
    }
    

    【讨论】:

    • 我创建了一个自定义适配器来将图像加载到 gridview 上。你能告诉我,我怎样才能将它与 DraggableGridView 集成在一起
    • 您可以使用 layoutinflator 为您的自定义布局充气。
    • 您能否提供任何链接/来源/示例?我只是android的初学者。
    • 感谢您的回复。我已经这样做了:
      private void setPresidentImages() { int images[] = {R.drawable.p_1, R.drawable.p_2, R.drawable.p_3, R.drawable.p_4, R.drawable.p_5 , R.drawable.p_6}; for (int i = 0; i
    • 现在我可以拖放图像了。但我几乎没有怀疑。 1. 我怎样才能连续修复 3 张图像。 2. 我怎么知道我的图片在点击按钮时的位置。拖放后,是否可以知道每个图像的位置? (即我想知道每张图片的位置/cell_number)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多