안드로이드 개발 질문/답변
(글 수 45,052)
package pkg.project_n1;
import android.content.*; import android.graphics.*; import android.view.*; import android.view.View.OnClickListener; import android.view.View.OnTouchListener; import android.widget.*;
class MainIconAdapter extends BaseAdapter{
private Context mContext;
private int[] mImageIds={
R.drawable.photo,
R.drawable.iradio,
R.drawable.music,
R.drawable.movie,
R.drawable.setup,
};
private int[] mImageIds_f={
R.drawable.photo_f,
R.drawable.iradio_f,
R.drawable.music_f,
R.drawable.movie_f,
R.drawable.setup_f,
};
public MainIconAdapter(Context c){
mContext = c;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mImageIds.length;
}
@Override
public Object getItem(int pos) {
// TODO Auto-generated method stub
return mImageIds[pos];
}
@Override
public long getItemId(int pos) {
// TODO Auto-generated method stub
return pos;
}
@Override
public View getView(final int pos, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View MyView = convertView;
if(convertView == null){
LayoutInflater li = (LayoutInflater) mContext.getSystemService(mContext.LAYOUT_INFLATER_SERVICE);
MyView = li.inflate(R.layout.mainicon, null);
/*
TextView tv = (TextView)MyView.findViewById(R.id.mainicon_text);
switch(pos)
{
case 0: tv.setText(R.string.photo); break;
case 1: tv.setText(R.string.iradio); break;
case 2: tv.setText(R.string.music); break;
case 3: tv.setText(R.string.movie); break;
}
*/
final ImageView iv = (ImageView)MyView.findViewById(R.id.mainicon_image);
/*
iv.setImageResource(mImageIds[pos]);
iv.setAdjustViewBounds(true);
iv.setScaleType(ImageView.ScaleType.FIT_CENTER);
iv.setPadding(8,8,8,8);
iv.setBackgroundColor(Color.BLACK);
*/
iv.setImageResource(mImageIds[pos]);
iv.setAdjustViewBounds(true);
iv.setScaleType(ImageView.ScaleType.FIT_CENTER);
iv.setPadding(8,8,8,8);
iv.setBackgroundColor(Color.BLACK);
iv.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
if(event.getAction() == MotionEvent.ACTION_UP)
{
iv.setImageResource(mImageIds[pos]);
// return true;
}
if(event.getAction() == MotionEvent.ACTION_DOWN){
iv.setImageResource(mImageIds_f[pos]);
}
return true;
}
});
//iv.setLayoutParams(new Gallery.LayoutParams(136, 88));
}
return MyView;
}
}
이제 공부한지 2주차되는 초봅니다..;
갤러리뷰에 이미지를 보여주되.. 이미지를 터치했을때 눌렸다라는 표시를 해줄려고 위처럼 이미지를 순간 바꿔줄려고 합니다..
근데 위의 코드대로 하면은 이미지가 바뀝니다..
대신 이미지를 선택한 상태로 드래그가 안됩니다.. 이미지가 아닌 빈공간을 드래그하면 되구요..
오늘 반나절 이것때문에 고민만하고 있습니다..ㅠㅠ




터치 리스너를 쓰지 마시고...
Drawable 중에 StateListDrawable을 쓰시는게 좋을 것 같습니다.
selector가 StateListDrawable로 바뀐다고 보시면 되는거라서...
동적으로 이미지를 선택하는 경우라면 StateListDrawable을 쓰시면 됩니다.