image와 text2개를 inflate로 묶어 List로 뿌려주는 연습한 소스에
animated gif를 보여주는 View를 하나 추가한건데 에러가 나긴 하는데 잡지는 못하겠네요

01-18 01:11:51.413: WARN/dalvikvm(2022): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
01-18 01:11:51.423: ERROR/AndroidRuntime(2022): Uncaught handler: thread main exiting due to uncaught exception
01-18 01:11:51.464: ERROR/AndroidRuntime(2022): android.view.InflateException: Binary XML file line #23: Error inflating class com.widget.test.SampleView
01-18 01:11:51.464: ERROR/AndroidRuntime(2022):     at android.view.LayoutInflater.createView(LayoutInflater.java:503)
01-18 01:11:51.464: ERROR/AndroidRuntime(2022):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:565)
01-18 01:11:51.464: ERROR/AndroidRuntime(2022):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:618)
01-18 01:11:51.464: ERROR/AndroidRuntime(2022):     at android.view.LayoutInflater.inflate(LayoutInflater.java:407)
01-18 01:11:51.464: ERROR/AndroidRuntime(2022):     at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
01-18 01:11:51.464: ERROR/AndroidRuntime(2022):     at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
01-18 01:11:51.464: ERROR/AndroidRuntime(2022):     at com.widget.test.ConversationAdapter.getView(ConversationAdapter.java:51)
01-18 01:11:51.464: ERROR/AndroidRuntime(2022):     at android.widget.AbsListView.obtainView(AbsListView.java:1274)
01-18 01:11:51.464: ERROR/AndroidRuntime(2022):     at android.widget.ListView.measureHeightOfChildren(ListView.java:1147)
01-18 01:11:51.464: ERROR/AndroidRuntime(2022):     at android.widget.ListView.onMeasure(ListView.java:1060)
01-18 01:11:51.464: ERROR/AndroidRuntime(2022):     at android.view.View.measure(View.java:7963)
01-18 01:11:51.464: ERROR/AndroidRuntime(2022):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3023)
01-18 01:11:51.464: ERROR/AndroidRuntime(2022):     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:888)
01-18 01:11:51.464: ERROR/AndroidRuntime(2022):     at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:619)
01-18 01:11:51.464: ERROR/AndroidRuntime(2022):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:280)
01-18 01:11:51.464: ERROR/AndroidRuntime(2022):     at android.view.View.measure(View.java:7963)
01-18 01:11:51.464: ERROR/AndroidRuntime(2022):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3023)
01-18 01:11:51.464: ERROR/AndroidRuntime(2022):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
01-18 01:11:51.464: ERROR/AndroidRuntime(2022):     at android.view.View.measure(View.java:7963)
01-18 01:11:51.464: ERROR/AndroidRuntime(2022):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:464)
01-18 01:11:51.464: ERROR/AndroidRuntime(2022):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:278)
01-18 01:11:51.464: ERROR/AndroidRuntime(2022):     at android.view.View.measure(View.java:7963)
01-18 01:11:51.464: ERROR/AndroidRuntime(2022):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3023)
01-18 01:11:51.464: ERROR/AndroidRuntime(2022):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
01-18 01:11:51.464: ERROR/AndroidRuntime(2022):     at android.view.View.measure(View.java:7963)
01-18 01:11:51.464: ERROR/AndroidRuntime(2022):     at android.view.ViewRoot.performTraversals(ViewRoot.java:763)
01-18 01:11:51.464: ERROR/AndroidRuntime(2022):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1633)
01-18 01:11:51.464: ERROR/AndroidRuntime(2022):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-18 01:11:51.464: ERROR/AndroidRuntime(2022):     at android.os.Looper.loop(Looper.java:123)
01-18 01:11:51.464: ERROR/AndroidRuntime(2022):     at android.app.ActivityThread.main(ActivityThread.java:4325)
01-18 01:11:51.464: ERROR/AndroidRuntime(2022):     at java.lang.reflect.Method.invokeNative(Native Method)
01-18 01:11:51.464: ERROR/AndroidRuntime(2022):     at java.lang.reflect.Method.invoke(Method.java:521)
01-18 01:11:51.464: ERROR/AndroidRuntime(2022):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
01-18 01:11:51.464: ERROR/AndroidRuntime(2022):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
01-18 01:11:51.464: ERROR/AndroidRuntime(2022):     at dalvik.system.NativeStart.main(Native Method)
01-18 01:11:51.464: ERROR/AndroidRuntime(2022): Caused by: java.lang.NoSuchMethodException: SampleView(Context,AttributeSet)
01-18 01:11:51.464: ERROR/AndroidRuntime(2022):     at java.lang.Class.getMatchingConstructor(Class.java:674)
01-18 01:11:51.464: ERROR/AndroidRuntime(2022):     at java.lang.Class.getConstructor(Class.java:486)
01-18 01:11:51.464: ERROR/AndroidRuntime(2022):     at android.view.LayoutInflater.createView(LayoutInflater.java:475)
01-18 01:11:51.464: ERROR/AndroidRuntime(2022):     ... 34 more
01-18 01:11:51.544: INFO/Process(53): Sending signal. PID: 2022 SIG: 3



//Conversation.java
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class ConversationAdapter extends BaseAdapter {
private Context mContext;
private Bitmap mIcon1;
private LayoutInflater mInflater;
public ConversationAdapter(Context context) {
        mContext = context;
        mInflater = LayoutInflater.from(context);
        mIcon1 = BitmapFactory.decodeResource(context.getResources(), R.drawable.icon);
    }
@Override
public int getCount() {
// TODO Auto-generated method stub
return number.length;
}

@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}

@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
SpeechView sv;
        if (convertView == null) {
         convertView = mInflater.inflate(R.layout.test_conversation, null);
                
            sv = new SpeechView(mContext, number[position], etc[position]);
            sv.numberText = (TextView) convertView.findViewById(R.id.number);
            sv.etcText = (TextView) convertView.findViewById(R.id.etc);
            sv.image = (ImageView)convertView.findViewById(R.id.image);
            //sv.sample = new SampleView(mContext);
            sv.sample = (SampleView) convertView.findViewById(R.id.sampleview);
            
            convertView.setTag(sv);
        } else {
         sv = (SpeechView) convertView.getTag();
            //sv = (SpeechView) convertView;
            //sv.setTitle(mString[position]);
            //sv.setDialogue(mString2[position]);
        
         Log.e("else","!!!!!!!!!!!!!!!!!!!!!");
        }
        
        sv.numberText.setText(number[position]);
        sv.etcText.setText(etc[position]);
        if (position%2!=1)
         sv.image.setImageBitmap(mIcon1);

        return convertView;
}
public class SpeechView extends RelativeLayout {
        public SpeechView(Context context, String title, String words) {
            super(context);

        }

        
        public void setTitle(String title) {
         numberText.setText(title);
        }

        public void setDialogue(String words) {
         etcText.setText(words);
        }
        
        ImageView image;
        TextView etcText;
        TextView numberText;
        SampleView sample;
    }
String[] number = {"one", "two", "three", "four","five","six","seven", "eight", "nine"};
String[] etc = {"book", "note", "pen", "ruler","pencil","laptop","postit", "drug", "mouse"};

}

//Sample.java
package com.widget.test;


import com.widget.R;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Movie;
import android.graphics.Paint;
import android.view.View;

public class SampleView extends View {

    private Movie mMovie;
    private long mMovieStart;
         
    public SampleView(Context context) {
        super(context);
        setFocusable(true);
        
        java.io.InputStream is;
                         
        is = context.getResources().openRawResource(R.drawable.animated_gif);
        mMovie = Movie.decodeStream(is);           
    }
    
    @Override protected void onDraw(Canvas canvas) {
        canvas.drawColor(0xFFCCCCCC);            
        
        Paint p = new Paint();
        p.setAntiAlias(true);
                   
        
        long now = android.os.SystemClock.uptimeMillis();
        if (mMovieStart == 0) {   // first time
            mMovieStart = now;
        }
        if (mMovie != null) {
            int dur = mMovie.duration();
            if (dur == 0) {
                dur = 1000;
            }
            int relTime = (int)((now - mMovieStart) % dur);
            mMovie.setTime(relTime);
            mMovie.draw(canvas, getWidth() - mMovie.width(),
                        getHeight() - mMovie.height());
            invalidate();
        }
    }
}

XML파일

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content">
   <ImageView android:id="@+id/image" 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content"/>
          
<TextView android:text="123"
android:id="@+id/number" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content"
android:layout_toRightOf="@id/image"/>
<TextView  android:text="123"
android:id="@+id/etc" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content"
android:layout_toRightOf="@id/image"
android:layout_below="@id/number"/>
<com.widget.test.SampleView
android:id="@+id/sampleview"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/number"/>
</RelativeLayout>