2016-08-14 43 views
0

我在一個RelativeLayout中以編程方式動態添加ImageView,但我還需要使用onClick處理程序和這些動態ImageView去除圖標/按鈕。所以,如果我點擊任何刪除圖標相關的動態圖像視圖將被刪除。如何在android中以編程方式附加刪除圖標與動態添加圖像?

這裏是我的代碼,其中我加入裏面的佈置動態圖像的觀點:

RelativeLayout rl = (RelativeLayout) findViewById(R.id.rl); 
     RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
       RelativeLayout.LayoutParams.WRAP_CONTENT, 
       RelativeLayout.LayoutParams.WRAP_CONTENT); 


     final ImageView iv = new ImageView(this); 
     iv.setId(id); 
     iv.setPadding(2, 2, 2, 2); 
     iv.setImageBitmap(BitmapFactory.decodeResource(
       getResources(), (int)iconTable[id])); 
     iv.setScaleType(ImageView.ScaleType.MATRIX); 
     iv.setLayoutParams(lp); 

     rl.addView(iv); 
+0

您能澄清你想達到的目標嗎?它有點不清楚。 – Shaishav

+0

嗨Shaishav,其實我動態地在圖像上添加表情符號,但我也需要添加刪除選項與表情符號。用戶可以添加更多的表情符號,如果他們不需要,他們也可以刪除。 –

+0

而且每個表情符號都可以在圖像中移動,所以如果表情符號移動,則附加的刪除圖標也應該移動。 –

回答

1

我建議你創建一個自定義組件。事情是這樣的:

public class DeletableImageView extends LinearLayout { 

    private ImageView mImage; 
    private Button mButton; 

    DeletableImageListener mListener 

    public DeletableImageView(Context context) { 
     super(context); 
     init(context); 
    } 

    public DeletableImageView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(context); 
    } 

    public DeletableImageView(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     init(context); 
    } 

    private void init(Context context) { 
     setOrientation(LinearLayout.VERTICAL); 
     inflate(context, R.layout.deletable_image, this); 
     initViews(); 
    } 

    private void initViews() { 
     mImage= (ImageView) findViewById(R.id.image); 
     mButton= (Button) findViewById(R.id.delete_button); 
     mButton.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       if (mListener != null) { 
        mListener.deleteMe(DeletableImageView.this); 
       } 
      } 
     } 
    } 

    public void setListener(DeleteableImageListener listener) { 
     mListener = listener; 
    } 

    public interface DeletableImageListener { 
     void deleteMe(DeletableImageView me); 
    } 

    public void setImage(Drawable drawable) { 
     mImage.setBackground(drawable); 
    } 
} 

R.layout.deletable_image是一個正常的XML的佈局<merge>爲根元素(因爲DeletableImageView已經是一個的LinearLayout內合併,標籤你有ImageView的和按鈕

<merge xmlns="..."> 

    <ImageView android:id="@+id/image" .../> 

    <Button android:id="@+id/delete_button" .../> 

</merge> 

在你的代碼不添加ImageView的,但你的自定義組件,並設置監聽器回調,這樣你就可以再次刪除自定義組件。

RelativeLayout rl = (RelativeLayout) findViewById(R.id.rl); 


final DeletableImageView div = new DeletableImageView(this); 

div.setImage(...); // add this method to DeletableImageView 
div.setListener(this); 

// either implement these in your custom component or directly set it in the <ImageView> in R.layout.deletable_image 
div.setScaleType(...); 
div.setPadding(2, 2, 2, 2); 


rl.addView(div); 

最後一步是執行deleteMe(DeletableImageView me)。您必須持有對您的RelativeLayout的參考,它應該可以通過調用rl.removeView(me);

+0

嗨,實際上用戶選擇儘可能多的表情符號來設置他們的圖像進行蒙版編輯,如果他們不需要表情符號他們可以刪除和表情符號也可以通過觸摸移動,所以刪除按鈕與每個表情符號也應該是可移動的地方。我可以爲此使用此代碼嗎?我想我需要爲emoji和remove按鈕添加類似於相對佈局的包裝,並且佈局應該是可移動的,因爲兩者都將被移動。 –

+0

我不確定你的意思,但是你當然也可以'DeletableImageView extends RelativeLayout'獲得一個RelativeLayout的所有屬性。在視圖中使用DragAndDrop是另一回事。對於DragAndDrop谷歌的「ViewDragHelper」 – muetzenflo

+0

嗨,你可以告訴我R.layout.deletable_image的例子,它應該看起來像佈局? –

相關問題