2016-08-14 6 views
0

ImageViewをプログラムで動的にRelativeLayout内に追加していますが、これらの動的ImageViewでonClickハンドラを使用してアイコン/ボタンを削除する必要があります。そのため、その動的画像ビューに関連する削除アイコンのいずれかをクリックすると削除されます。私は、カスタムコンポーネントを作成することをお勧めしたいアンドロイドでプログラムによって動的に追加された画像を持つアイコンを削除するにはどうすればいいですか?

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は、ルート要素として<merge>と、通常のXMLレイアウト(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と削除ボタンの両方の相対的なレイアウトのようなラッパーを追加する必要があると思うレイアウトは両方の移動される結果として移動可能でなければなりません。 –

+0

私はあなたが正確に何を意味するのか分かりませんが、もちろん、RelativeLayoutのすべてのプロパティを取得するために 'DeletableImageView extends RelativeLayout'を実行することもできます。 ViewでDragAndDropを使用することは別の話です。 "ViewDragHelper"のDragAndDrop googleの場合 – muetzenflo

+0

こんにちは、R.layout.deletable_imageの例を表示できますか? –

関連する問題