1.计算机图片的说明
1:BMP,质量最高,用于计算机。
2:PNG,质量高。用户计算机,网络,Android中的图片一般使用png保存。
3:JPEG,较高质量。用于计算机、网络、电子邮件。
4:gif,质量不好,用于计算机、网络、制作动图。
5:单色。一个像素使用一个二进制数表示。200*200单色图片。40000/8(8个二进制数1字节)=5000,5000/1024=4.8,大概是4.8kb。
6:16色。一个像素可以表示16种颜色,使用4位。所以一个像素是0.5byte。
7:256色。一个像素可以表示256中颜色。使用8位,所以一个像素就是1byte。
8:24位位图。一个像素使用24个二进制数表示,所以一个像素就是3byte。
9:Android使用argb表示,alpha代表8个二进制数,red代表8个二进制数,green代表8个二进制数,blue代表8个二进制数。所以一个像素就是4byte。
2.加载大图是遇到的问题和解决方法
public class MainActivity extends Activity {
private ImageView iv_dog;
private String path = "mnt/sdcard/dog.bmp";
private Point outSize;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv_dog = (ImageView) findViewById(R.id.iv_doy);
int width = getWindowManager().getDefaultDisplay().getWidth();
int height = getWindowManager().getDefaultDisplay().getHeight();
System.out.println("width:" + width + "height:" + height);
outSize = new Point();
getWindowManager().getDefaultDisplay().getSize(outSize);
System.out.println("width:" + outSize.x + "height:" + outSize.y);
}
public void onClick(View v){
loadImg4();
}
public void loadImg1(){
Bitmap bitmap = BitmapFactory.decodeFile(path);
iv_dog.setImageBitmap(bitmap);
}
public void loadImg2(){
BitmapFactory.Options options = new Options();
options.inSampleSize = 2;
Bitmap bitmap = BitmapFactory.decodeFile(path,options);
iv_dog.setImageBitmap(bitmap);
}
public void loadImg3(){
BitmapFactory.Options options = new Options();
options.inJustDecodeBounds = true;
Bitmap bitmap = BitmapFactory.decodeFile(path,options);
int width = options.outWidth;
int height = options.outHeight;
int widthScreen = outSize.x;
int heightScreen = outSize.y;
if(width > widthScreen || height > heightScreen){
int widthNum = Math.round((float)width / (float) widthScreen);
int heightNum = Math.round((float) height / (float) heightScreen);
options.inSampleSize = Math.max(widthNum, heightNum);
}
System.out.println(options.inSampleSize);
options.inJustDecodeBounds = false;
bitmap = BitmapFactory.decodeFile(path,options);
iv_dog.setImageBitmap(bitmap);
}
public void loadImg4(){
BitmapFactory.Options options = new Options();
Bitmap bitmap = null;
int i = 1;
for(;;){
try {
options.inSampleSize = i;
bitmap = BitmapFactory.decodeFile(path, options);
break;
} catch (Error e) {
i *= 2;
System.out.println(i);
}
}
iv_dog.setImageBitmap(bitmap);
}
}
3.创建图片副本
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView iv_tomcat = (ImageView) findViewById(R.id.iv_tomcat);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.tomcat);
iv_tomcat.setImageBitmap(bitmap);
Bitmap bitmap2 = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), bitmap.getConfig());
Canvas canvas = new Canvas(bitmap2);
Matrix matrix = new Matrix();
Paint paint = new Paint();
canvas.drawBitmap(bitmap, matrix, paint);
for(int i = 0;i < 30;i++){
bitmap2.setPixel(i, i, Color.RED);
}
iv_tomcat.setImageBitmap(bitmap2);
}
}
4.图形简单处理
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView iv_img2 = (ImageView) findViewById(R.id.iv_img2);
Bitmap bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.tomcat);
Bitmap bitmap2 = Bitmap.createBitmap(bitmap1.getWidth(), bitmap1.getHeight(), bitmap1.getConfig());
Canvas canvas = new Canvas(bitmap2);
Matrix matrix = new Matrix();
matrix.setRotate(20, 0f, 0f);
matrix.setTranslate(30f, 0f);
matrix.setScale(1f, -1f);
matrix.postTranslate(0, bitmap2.getHeight());
Paint paint = new Paint();
canvas.drawBitmap(bitmap1, matrix, paint);
iv_img2.setImageBitmap(bitmap2);
}
}
5.画画板案例
public class MainActivity extends Activity {
private Canvas canvas;
private Paint paint;
private ImageView iv_img;
private Bitmap bitmap2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv_img = (ImageView) findViewById(R.id.iv_img);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.bg);
bitmap2 = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), bitmap.getConfig());
canvas = new Canvas(bitmap2);
Matrix matrix = new Matrix();
paint = new Paint();
canvas.drawBitmap(bitmap, matrix, paint);
iv_img.setImageBitmap(bitmap2);
MyOnTouchListener l = new MyOnTouchListener();
iv_img.setOnTouchListener(l);
}
private class MyOnTouchListener implements OnTouchListener {
private float startX;
private float startY;
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
startX = event.getX();
startY = event.getY();
break;
case MotionEvent.ACTION_MOVE:
float x = event.getX();
float y = event.getY();
System.out.println("x" + x + "y" + y + "startX" + startX + "startY" + startY);
canvas.drawLine(startX, startY, x, y, paint);
iv_img.setImageBitmap(bitmap2);
startX = x;
startY = y;
break;
case MotionEvent.ACTION_UP:
System.out.println("up");
break;
}
return true;
}
}
public void changeColor(View v){
paint.setColor(Color.RED);
}
public void changeWidth(View v){
paint.setStrokeWidth(5);
}
public void save(View v){
File file = new File(Environment.getExternalStorageDirectory(),System.currentTimeMillis() + ".png");
FileOutputStream outputStream = null;
System.out.println(Environment.getExternalStorageDirectory().toString());
try {
outputStream = new FileOutputStream(file);
bitmap2.compress(CompressFormat.PNG, 100, outputStream);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Intent intent = new Intent();
intent.setAction(Intent.ACTION_MEDIA_MOUNTED);
intent.setData(Uri.fromFile(Environment.getExternalStorageDirectory()));
sendBroadcast(intent);
System.out.println("kkkk");
}
}
6.syf案例
public class MainActivity extends Activity {
private Bitmap bitmap2;
private ImageView iv_front;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv_front = (ImageView) findViewById(R.id.iv_front);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.front);
bitmap2 = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), bitmap.getConfig());
Canvas canvas = new Canvas(bitmap2);
Matrix matrix = new Matrix();
Paint paint = new Paint();
canvas.drawBitmap(bitmap, matrix, paint);
iv_front.setImageBitmap(bitmap2);
iv_front.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_MOVE:
float x = event.getX();
float y = event.getY();
try {
for(int i = -5;i <= 5;i++){
for(int j = -5;j <= 5;j++){
if(Math.sqrt(i * i + j* j) <= 5){
bitmap2.setPixel((int)x + i, (int)y + j, Color.TRANSPARENT);
}
}
}
iv_front.setImageBitmap(bitmap2);
} catch (Exception e) {
}
break;
case MotionEvent.ACTION_UP:
break;
}
return true;
}
});
}
}
7.音乐播放器
public class MainActivity extends Activity {
private MyBinder myBinder;
private ImageButton ib_play;
private MyServiceConnection conn;
private SeekBar sb_progress;
private Handler handler = new Handler(){
public void handleMessage(Message msg) {
if(msg.what == UPDATE_SEEKBAR){
updateProgress();
}
}
};
private int UPDATE_SEEKBAR = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ib_play = (ImageButton) findViewById(R.id.ib_play);
sb_progress = (SeekBar) findViewById(R.id.sb_progress);
Intent service = new Intent(this,MusicPlayService.class);
startService(service);
conn = new MyServiceConnection();
bindService(service, conn, BIND_AUTO_CREATE);
sb_progress.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
if(fromUser){
myBinder.seekTo(progress);
}
}
});
}
public void play(View v){
myBinder.playPause();
changeImg();
}
public void updateProgress(){
System.out.println("updateProgress");
sb_progress.setProgress(myBinder.getCurrentPosition());
handler.sendEmptyMessageDelayed(UPDATE_SEEKBAR, 500);
}
public void changeImg(){
if(myBinder.isPlaying()){
ib_play.setImageResource(R.drawable.btn_audio_play);
handler.sendEmptyMessage(UPDATE_SEEKBAR);
}else {
ib_play.setImageResource(R.drawable.btn_audio_pause);
handler.removeMessages(UPDATE_SEEKBAR);
}
}
private class MyServiceConnection implements ServiceConnection {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
myBinder = (MyBinder) service;
changeImg();
sb_progress.setMax(myBinder.getDuration());
sb_progress.setProgress(myBinder.getCurrentPosition());
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
}
@Override
protected void onResume() {
super.onResume();
if(myBinder != null){
handler.sendEmptyMessage(UPDATE_SEEKBAR);
}
}
@Override
protected void onStop() {
super.onStop();
handler.removeCallbacksAndMessages(null);
}
@Override
protected void onDestroy() {
unbindService(conn);
super.onDestroy();
}
}
public class MusicPlayService extends Service {
private String path = "mnt/sdcard/xpg.mp3";
private MediaPlayer player;
@Override
public IBinder onBind(Intent intent) {
return new MyBinder();
}
public class MyBinder extends Binder{
public void playPause(){
if(isPlaying()){
player.pause();
}else {
player.start();
}
}
public boolean isPlaying(){
return player.isPlaying();
}
public int getDuration(){
return player.getDuration();
}
public int getCurrentPosition(){
return player.getCurrentPosition();
}
public void seekTo(int msec){
player.seekTo(msec);
}
}
@Override
public void onCreate() {
player = new MediaPlayer();
try {
player.setDataSource(path);
player.prepare();
} catch (Exception e) {
e.printStackTrace();
}
}
}
8.播放网络音乐
public class MainActivity extends Activity {
private String path = "http://10.0.2.2:8080/xpg.mp3";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void start(View v){
MediaPlayer player = new MediaPlayer();
try {
player.setDataSource(path);
player.prepareAsync();
player.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
}
9.SurfaceView和Mediaplayer播放视频
1:SurfaceView是一个重量级的空间,加载需要时间。他主要进行数据的展示,使用SurfaceHolder控制数据的展示。SurfaceView可以用来展示频繁变化的界面。
2:Mediaplayer音频的播放和音视频的解码。
public class MainActivity extends Activity {
private String path = "http://10.0.2.2:8080/oppo.mp4";
private SurfaceHolder holder;
private MediaPlayer player;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SurfaceView sv_video = (SurfaceView) findViewById(R.id.sv_video);
holder = sv_video.getHolder();
}
public void start(View v){
player = new MediaPlayer();
try {
player.setDataSource(path);
player.prepareAsync();
player.setDisplay(holder);
player.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
public void pause(View v){
if(player != null){
if(player.isPlaying()){
player.pause();
}else {
player.start();
}
}
}
}
10.VideoView播放视频
public class MainActivity extends Activity {
private String path = "http://10.0.2.2:8080/oppo.mp4";
private VideoView vv_video;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
vv_video = (VideoView) findViewById(R.id.vv_video);
}
public void start(View v){
vv_video.setVideoPath(path);
vv_video.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
vv_video.setMediaController(new MediaController(this));
}
public void pause(View v){
}
}
11.libary的导入和使用
1:import -> Browse -> Copy projects into workspece。
2:当前项目 -> Properties -> Android -> add -> 选择要的libary。
12.vitamio的使用
1:以library的形式引入vitamio框架。
2:在布局中定义VideoView
<io.vov.vitamio.widget.VideoView
android:id="@+id/vv"
android:layout_width="match_parent"
android:layout_height="match_parent" />
3:插件vitamio框架检查是否可用
if (!LibsChecker.checkVitamioLibs(this)) {
return;
}
4:一定要在清单文件初始化InitActivity。 <activity android:name="io.vov.vitamio.activity.InitActivity"></activity>。
public class MainActivity extends Activity {
private String path = "http://10.0.2.2:8080/rmvb.rmvb";
private VideoView vv_video;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (!LibsChecker.checkVitamioLibs(this)) {
return;
}
setContentView(R.layout.activity_main);
vv_video = (VideoView) findViewById(R.id.vv_video);
}
public void start(View v){
vv_video.setVideoPath(path);
vv_video.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
vv_video.setMediaController(new MediaController(this));
}
public void pause(View v){
}
}