imageview相关

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    android:orientation="vertical" >  
  
    <Button android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="选 择视频文件"
        />
        
    <TextView  
        android:layout_width="fill_parent"  
        android:id="@+id/img"
        android:layout_height="wrap_content"  
        android:text="图片缩略图" />  
  
    <ImageView  
        android:id="@+id/image_thumbnail"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content" />  
  
    <TextView  
        android:layout_width="fill_parent"  
        android:layout_height="wrap_content"  
        android:text="视频缩略图" />  
  <!-- android:adjustViewBounds="true"  -->
      <RelativeLayout android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:layout_gravity="center"
          android:gravity="center"
          android:background="#000000"
           >
        
             <ImageView
                android:id="@+id/video_thumbnail"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:maxWidth="600dp"
                android:maxHeight="600dp"
                android:adjustViewBounds="true"
                android:scaleType="fitCenter"
                android:background="#ff00ff"
                 />
             
             <TextView 
                 android:id="@+id/txt"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:gravity="right"
                 android:paddingRight="5dp"
                 android:paddingBottom="5dp"
                 android:text="00:00 184M"
                 android:layout_alignBottom="@id/video_thumbnail"
                 android:layout_alignRight="@id/video_thumbnail"
                 
                 />
             
             </RelativeLayout>


</LinearLayout>      

------------------------------------------------------------------------------------------------------------------------------------

package com.example.aidlclient;


import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.media.MediaPlayer;
import android.media.ThumbnailUtils;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.provider.MediaStore.Images;
import android.text.TextUtils;
import android.text.format.DateUtils;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;


import com.lx.aidlservice.ImageViewSec;


public class SigleTop extends Activity implements OnClickListener {


    
    private static final String TAG = "SigleTop";
    
    private static final int request_take_video_Code = 0x000001;
    
    private ImageView imageThumbnail;  
    private ImageView videoThumbnail; 
    
    private TextView mTxtTitle;
    private ImageViewSec secImg;
    private Button mBtn;
    private TextView mImg;
    private static String mVideoPath = "";
    private static Uri mUri;
    private TextView mTxt;
   
    
    public static Bitmap getVideoThumbnail(ContentResolver cr, Uri uri) {    
        Bitmap bitmap = null;    
        BitmapFactory.Options options = new BitmapFactory.Options();    
        options.inDither = false;    
        options.inPreferredConfig = Bitmap.Config.ARGB_8888;    
        Cursor cursor = cr.query(uri,new String[] { MediaStore.Video.Media._ID }, null, null, null);     
        
        if (cursor == null || cursor.getCount() == 0) {    
            return null;    
        }    
        cursor.moveToFirst();    
        String videoId = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media._ID));  //image id in image table.s    
    
        if (videoId == null) {    
        return null;    
        }    
        cursor.close();    
        long videoIdLong = Long.parseLong(videoId);
        bitmap = MediaStore.Video.Thumbnails.getThumbnail(cr, videoIdLong,Images.Thumbnails.MICRO_KIND, options);    
        Log.i(TAG, " getWidth=" + bitmap.getWidth() + " getHeight=" + bitmap.getHeight());
        return bitmap; 
        }    
 
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        setContentView(R.layout.answner);
        
        imageThumbnail = (ImageView) findViewById(R.id.image_thumbnail);  
        videoThumbnail = (ImageView) findViewById(R.id.video_thumbnail); 
        mImg = (TextView)findViewById(R.id.img);  
        
        mBtn = (Button) findViewById(R.id.btn);
        mBtn.setOnClickListener(this);
        mTxt = (TextView) findViewById(R.id.txt);
        DisplayMetrics outMetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(outMetrics); 
        
        Log.d(TAG, "outMetrics.densityDpi=" + outMetrics.densityDpi
                        + ",outMetrics.heightPixels=" + outMetrics.heightPixels
                        + ",outMetrics.widthPixels=" + outMetrics.widthPixels);
        showImage();
    }
  
    
    /** 
     * 根据指定的图像路径和大小来获取缩略图 
     * 此方法有两点好处: 
     *     1. 使用较小的内存空间,第一次获取的bitmap实际上为null,只是为了读取宽度和高度, 
     *        第二次读取的bitmap是根据比例压缩过的图像,第三次读取的bitmap是所要的缩略图。 
     *     2. 缩略图对于原图像来讲没有拉伸,这里使用了2.2版本的新工具ThumbnailUtils,使 
     *        用这个工具生成的图像不会被拉伸。 
     * @param imagePath 图像的路径 
     * @param width 指定输出图像的宽度 
     * @param height 指定输出图像的高度 
     * @return 生成的缩略图 
     */  
    private Bitmap getImageThumbnail(String imagePath, int width, int height) {  
     Bitmap bitmap = null;  
     BitmapFactory.Options options = new BitmapFactory.Options();  
     options.inJustDecodeBounds = true;  
     // 获取这个图片的宽和高,注意此处的bitmap为null  
     bitmap = BitmapFactory.decodeFile(imagePath, options);  
     options.inJustDecodeBounds = false; // 设为 false  
     // 计算缩放比  
     int h = options.outHeight;  
     int w = options.outWidth;  
     int beWidth = w / width;  
     int beHeight = h / height;  
     int be = 1;  
     if (beWidth < beHeight) {  
      be = beWidth;  
     } else {  
      be = beHeight;  
     }  
     if (be <= 0) {  
      be = 1;  
     }  
     options.inSampleSize = be;  
     // 重新读入图片,读取缩放后的bitmap,注意这次要把options.inJustDecodeBounds 设为 false  
     bitmap = BitmapFactory.decodeFile(imagePath, options);  
     // 利用ThumbnailUtils来创建缩略图,这里要指定要缩放哪个Bitmap对象  
     bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height,  
       ThumbnailUtils.OPTIONS_RECYCLE_INPUT);  
     return bitmap;  
    }  
     
    /** 
     * 获取视频的缩略图 
     * 先通过ThumbnailUtils来创建一个视频的缩略图,然后再利用ThumbnailUtils来生成指定大小的缩略图。 
     * 如果想要的缩略图的宽和高都小于MICRO_KIND,则类型要使用MICRO_KIND作为kind的值,这样会节省内存。 
     * @param videoPath 视频的路径 
     * @param width 指定输出视频缩略图的宽度 
     * @param height 指定输出视频缩略图的高度度 
     * @param kind 参照MediaStore.Images.Thumbnails类中的常量MINI_KIND和MICRO_KIND。 
     *            其中,MINI_KIND: 512 x 384,MICRO_KIND: 96 x 96 
     * @return 指定大小的视频缩略图 
     */  
    private Bitmap getVideoThumbnail(String videoPath, int width, int height,  
      int kind) {  
     Bitmap bitmap = null;  
     // 获取视频的缩略图  
     bitmap = ThumbnailUtils.createVideoThumbnail(videoPath, kind);  
     if (null != bitmap) {
         int newW = Math.round(bitmap.getWidth() * 1.1f);
         int newH = Math.round(bitmap.getHeight() * 1.1f);
     
         Log.d(TAG, "w="+bitmap.getWidth() + " newW=" + newW);  
         Log.d(TAG, "h="+bitmap.getHeight() + " newH=" + newH); 
         bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height,  
                 ThumbnailUtils.OPTIONS_RECYCLE_INPUT);  
               if (null != bitmap) {
                   Log.d(TAG, "extractThumbnail w="+bitmap.getWidth());  
                   Log.d(TAG, "extractThumbnail h="+bitmap.getHeight()); 
               }
     }


     return bitmap;  
    }


    protected String getAbsolutePath(Uri uri) 
    {
        // can post image
        String [] proj={MediaStore.Video.Media.DATA, MediaStore.Video.Media.HEIGHT, MediaStore.Video.Media.WIDTH};
        Cursor cursor = managedQuery( uri,
                        proj,                 // Which columns to return
                        null,       // WHERE clause; which rows to return (all rows)
                        null,       // WHERE clause selection arguments (none)
                        null);                 // Order-by clause (ascending by name)
        
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA);
        int height_index = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.HEIGHT);
        int width_index = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.WIDTH);
        
        cursor.moveToFirst();
        String height = cursor.getString(height_index);
        String width = cursor.getString(width_index);
        Log.d(TAG, "getAbsolutePath width=" + width + " height=" +height);
        return cursor.getString(column_index);
    }
    
    private void showImage() {
        Log.i(TAG, "==> showImage mVideoPath=" + mVideoPath);
        if (!TextUtils.isEmpty(mVideoPath)) {
            Bitmap bitmap = getVideoThumbnail(mVideoPath, 700, 700,  
                    /*MediaStore.Images.Thumbnails.MICRO_KIND*/ MediaStore.Images.Thumbnails.MINI_KIND);
            
            MediaPlayer mp = null;
            try {
                mp = MediaPlayer.create(this, mUri);
                long elapsedSeconds = mp.getDuration();
                String time =  DateUtils.formatElapsedTime(elapsedSeconds/1000).trim();
                int w = Math.round((bitmap.getWidth()*.88f));
                int h = Math.round((bitmap.getHeight()*.88f));
                videoThumbnail.setImageBitmap(bitmap);
                mTxt.setText(time+ " 990M");
                Log.d(TAG,"showImage bitmap.getWidth=" + bitmap.getWidth() + " videoThumbnail.getWidth=" + videoThumbnail.getWidth() 
                        + " bitmap.getHeight=" + bitmap.getHeight() + " videoThumbnail.getHeight=" + videoThumbnail.getHeight()
                        
                        );
                
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (null != mp) {
                    mp.release();
                    mp = null;
                }
            }
        }
    }
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        
        if (resultCode == RESULT_OK && null != data) {
            switch (requestCode) {
            case request_take_video_Code:
                mUri  = data.getData();
                if (null == mUri) return;
                mVideoPath = getAbsolutePath(mUri);
                showImage();
                break;
            }
        }
        
    }
    
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.btn:
            Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
            intent.setType("video/*");
            startActivityForResult(Intent.createChooser(intent, "Select movie"), request_take_video_Code);
            break;
        }
    }  
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值