7

SDカードに保存されている動画からサムネイルを作成し、サムネイルとその名前をグリッドビューで表示しています。グリッドビューのアイテムが選択されたイベントでダイアログがポップアップし、x、y、右、下の位置を尋ね、それをメインアクティビティに貼り付けます。ビデオファイルを入手し、メディアストアを使用してサムネイルを作成しようとしましたが、サムネイルをビットマップとして取得していますが、ビットマップがnullです。グリッドビューでは、ビデオ名が表示され、対応するサムネイルを選択でき、位置を指定することもできます。また、サムネイルをメインアクティビティに設定することもできます。問題は、ビットマップがnullであり、ビットマップイメージが表示されないことです(テキストビュービデオ名が表示されます)。どうしたの ?わからない?Plzは私を助けますか?私のコードを以下に示します。前もって感謝します。

      if (f.isFile()) {
      if (fName.endsWith(".mpg")
    || fName.endsWith(".mov")
    || fName.endsWith(".wmv")
    || fName.endsWith(".rm")
    || fName.endsWith(".mp4")) {
    tv.setText(fName);
    path = f.getAbsolutePath();
    System.out.println("Video file path=>"+path);


 thumb = ThumbnailUtils.createVideoThumbnail(f.getAbsolutePath(),MediaStore.Video.Thumbnails.MICRO_KIND);


    if(thumb==null)
      {
         /**Every time it printing null**/
         System.out.println("Thumb is null");

      }
      iv.setImageBitmap(thumb);
4

3 に答える 3

3

ThumbnailUtils.createVideoThumbnailドキュメントから:May return null if the video is corrupt or the format is not supported.

デフォルトでは、サポートされているほとんどすべての形式はmp4と3gpです。デフォルトでサポートされているメディア形式の完全なリストについては、 http: //developer.android.com/guide/appendix/media-formats.htmlを参照してください。

于 2013-07-22T15:17:34.450 に答える
1

SDカードビデオからサムネイルを作成しているThumbnailUtils.createVideoThumbnail 場合は、カーソルを使用して作成します。

この例を参照してください

于 2013-10-13T20:34:32.650 に答える
0
Try this code. It is getting the thumbnail of videos from urls. instead of pass the path of sd card .it will help you . Dont forgot to add internet permission in manifest file.
public class VideoThumbnailActivity extends Activity {

    public static final String Downloader = null;
    static String uri1="http://daily3gp.com/vids/lucky_guy.3gp";
    static String uri2="http://daily3gp.com/vids/reporter_hit_by_plane.3gp";
    static String uri3="http://daily3gp.com/vids/motorcycle_wipesout_explodes.3gp";
    static String uri4="http://commonsware.com/misc/test2.3gp";
    public static  String uri_array[]={uri1,uri2,uri3,uri4,uri1,uri2,uri3,uri4,uri1,uri2,uri3,uri4};


    ImageView imageView;
    String url;
    Gallery ga1,ga2;

    /** Called when the activity is first created. */
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        imageView = (ImageView)findViewById(R.id.imageView);
        ga1 = (Gallery)findViewById(R.id.gallery1);
        ga1.setAdapter(new ImageAdapter(getApplicationContext()));
        imageView.setImageBitmap(ThumbnailUtils.createVideoThumbnail(uri_array[0], MediaStore.Video.Thumbnails.FULL_SCREEN_KIND));

        //on click event on gallery
        ga1.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View view, final int position,long arg3) {
             imageView.setImageBitmap(ThumbnailUtils.createVideoThumbnail(uri_array[position], MediaStore.Video.Thumbnails.FULL_SCREEN_KIND));

             //on click event on imageview to play video
             imageView.setOnClickListener(new OnClickListener() {

                            @Override
                            public void onClick(View view) {
                                // TODO Auto-generated method stub
                                Intent intent = new Intent(getApplicationContext(),PlayActivity.class);
                                intent.putExtra("path",uri_array[position]);
                                startActivity(intent);
                            }
                        });

                        }

                });

            }

            public class ImageAdapter extends BaseAdapter {

                private Context ctx;
                int imageBackground;

                public ImageAdapter(Context c) {
                    ctx = c;
                    TypedArray ta = obtainStyledAttributes(R.styleable.Gallery1);
                    imageBackground = ta.getResourceId(R.styleable.Gallery1_android_galleryItemBackground, 1);
                    ta.recycle();
                }

                @Override
                public int getCount() {

                    return uri_array.length;

                }

                @Override
                public Object getItem(int arg0) {

                    return arg0;
                }

                @Override
                public long getItemId(int arg0) {

                    return arg0;
                }

                @Override
                public View getView(int position, View view, ViewGroup arg2) {

                    ImageView iv = new ImageView(ctx);
                    Bitmap curThumb = null;
                    curThumb = ThumbnailUtils.createVideoThumbnail(uri_array[position],MediaStore.Video.Thumbnails.FULL_SCREEN_KIND);
                    iv.setImageBitmap(curThumb);
                    iv.setScaleType(ImageView.ScaleType.FIT_XY);
                    iv.setLayoutParams(new Gallery.LayoutParams(150,120));
                    iv.setBackgroundResource(imageBackground);
                    return iv;
            }
        }

問題が解決したかどうかをお知らせください。

于 2012-11-09T07:01:31.150 に答える