1.查看图片封装
实现的是传入图片URL , 后 可以放大缩小图片,菜单可以保存图片等.
效果 预览 :
所需 工具 :
布局 实现 :
// activity_tbimage.xml 实现 :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black_overlay">
<include layout="@layout/header_toolbar" />
<cn.labelnet.gesture.GestureImageView
android:layout_below="@+id/toolbar"
android:id="@+id/iv_tb_image"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
// header_toolbar.xml实现 :
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
app:theme="@style/ThemeOverlay.AppCompat.ActionBar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:minHeight="?attr/actionBarSize"
android:layout_marginTop="20dp"
android:background="@color/black_semi_transparent">
<TextView
android:id="@+id/text_view_toolbar_title"
android:layout_centerInParent="true"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textColor="@color/text_color"
android:textSize="18sp"
android:gravity="center" />
</android.support.v7.widget.Toolbar>
业务 实现 :
package labelnet.cn.ledou;
import android.app.ProgressDialog;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.text.ClipboardManager;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import java.io.IOException;
import cn.labelnet.gesture.GestureImageView;
import labelnet.cn.ledou.net.NetManager;
import labelnet.cn.ledou.net.NetManagerImp;
import labelnet.cn.ledou.util.PictureUtil;
/**
* Created by yuan on 15-11-9.
*
* 图片工具类
*
*/
public class TbImageActivity extends AppCompatActivity {
private NetManager netManager;
private ProgressDialog progressDialog;
private TextView mToolBarTextView;
private String copy_url = "www.labelnet.cn";
private Bitmap bitmap;
private GestureImageView iv_tb_image;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tbimage);
iv_tb_image= (GestureImageView) findViewById(R.id.iv_tb_image);
//一些初始化
initToolbar();
initProgressBar();
netManager = new NetManagerImp();
initData();
}
private void initData() {
String url = getIntent().getStringExtra("url");
this.copy_url = url;
String title = getIntent().getStringExtra("title");
if (url == null) {
iv_tb_image.setImageResource(R.drawable.errorimage);
progressDialog.dismiss();
showToast("网络链接失败,请重试!");
} else {
new imageAsyncTask().execute(url);
}
if (title != null) {
mToolBarTextView.setText(title);
}
}
/**
* 初始化 Progressdialog
*/
private void initProgressBar() {
progressDialog = new ProgressDialog(this);
progressDialog.setMessage("小鱼说: 请稍后");
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.show();
}
private class imageAsyncTask extends AsyncTask<String, Void, Bitmap> {
@Override
protected Bitmap doInBackground(String... params) {
return netManager.getBitmap(params[0]);
}
@Override
protected void onPostExecute(Bitmap bmp) {
if(bmp==null){
showToast("网络错误,请重试!");
}else{
iv_tb_image.setImageBitmap(bmp);
bitmap=bmp;
}
progressDialog.dismiss();
}
}
/**
* 初始化 toolbar
*/
private void initToolbar() {
Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar);
mToolBarTextView = (TextView) findViewById(R.id.text_view_toolbar_title);
setSupportActionBar(mToolbar);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowTitleEnabled(false);
mToolbar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_gif, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.gif_menu_copy:
ClipboardManager clip = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
clip.setText(copy_url);
showToast("链接已复制:" + copy_url);
break;
case R.id.gif_menu_share:
showToast("客观,别急");
break;
case R.id.gif_menu_download:
String msg = "保存异常,";
try {
msg = PictureUtil.saveImage(copy_url, bitmap);
} catch (IOException e) {
msg += e.getMessage();
}
showToast(msg);
break;
}
return super.onOptionsItemSelected(item);
}
/**
* toast
* @param msg
*/
private void showToast(String msg) {
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}
/**
* 退出按钮
*/
@Override
public void onBackPressed() {
progressDialog.dismiss();
finish();
}
}
调用 实现:
Intent intent = new Intent(MainLeActivity.this, TbMusicActivity.class);
intent.putExtra("url", url);
intent.putExtra("title",title );
startActivity(intent);
2.查看Gif 封装
查看Gif 动态图, 也使用了单独的封装;
效果 预览 :
所需 工具 :
在build.Gradle app 中 添加 :
compile ‘com.felipecsl:gifimageview:2.0.0’
也可以自行到Github 上搜索 ;
布局 实现 :
//activity_tbgif.xml : header_toolbar和上面的一样
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black_overlay"
android:touchscreenBlocksFocus="false">
<include layout="@layout/header_toolbar"/>
<FrameLayout
android:id="@+id/container"
android:layout_below="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.felipecsl.gifimageview.library.GifImageView
android:id="@+id/gifImageView"
android:layout_gravity="center"
android:scaleType="fitCenter"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<!--<ProgressBar-->
<!--android:layout_width="wrap_content"-->
<!--android:layout_height="wrap_content"-->
<!--android:id="@+id/progressbar_gif"-->
<!--android:layout_gravity="center" />-->
</FrameLayout>
</RelativeLayout>
业务 实现 :
package labelnet.cn.ledou;
import android.app.ProgressDialog;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.text.ClipboardManager;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import com.felipecsl.gifimageview.library.GifImageView;
import java.io.IOException;
import labelnet.cn.ledou.net.NetManager;
import labelnet.cn.ledou.net.NetManagerImp;
import labelnet.cn.ledou.util.PictureUtil;
/**
* Created by yuan on 15-11-6.
* <p/>
* 播放 Gif的 Activity
*/
public class TbGifActivity extends AppCompatActivity {
private GifImageView gifImageView;
private NetManager netManager;
private ProgressDialog progressDialog;
private TextView mToolBarTextView;
private String copy_url = "www.labelnet.cn";
private Bitmap bitmap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tbgif);
//一些初始化
initToolbar();
initProgressBar();
netManager = new NetManagerImp();
gifImageView = (GifImageView) findViewById(R.id.gifImageView);
initData();
}
private void initData() {
String gif_url = getIntent().getStringExtra("url");
this.copy_url = gif_url;
String title = getIntent().getStringExtra("title");
if (gif_url == null) {
gifImageView.setImageResource(R.drawable.errorimage);
progressDialog.dismiss();
showToast("网络链接失败,请重试!");
} else {
new GifAsyncTask().execute(gif_url);
}
if (title != null) {
mToolBarTextView.setText(title);
}
}
/**
* 初始化 Progressdialog
*/
private void initProgressBar() {
progressDialog = new ProgressDialog(this);
progressDialog.setMessage("小鱼说: 请稍后");
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.show();
}
private class imageAsyncTask extends AsyncTask<String, Void, Bitmap> {
@Override
protected Bitmap doInBackground(String... params) {
return netManager.getBitmap(params[0]);
}
@Override
protected void onPostExecute(Bitmap bitmap) {
//iv_image.setImageBitmap(bitmap);
}
}
/**
* 进行数据请求
* GiF 请求
*/
private class GifAsyncTask extends AsyncTask<String, Void, byte[]> {
@Override
protected byte[] doInBackground(String... params) {
final String gifUrl = params[0];
return netManager.getGifByte(gifUrl);
}
@Override
protected void onPostExecute(byte[] bytes) {
gifImageView.setBytes(bytes);
gifImageView.startAnimation();
progressDialog.dismiss();
bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
}
}
/**
* 初始化 toolbar
*/
private void initToolbar() {
Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar);
mToolBarTextView = (TextView) findViewById(R.id.text_view_toolbar_title);
setSupportActionBar(mToolbar);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowTitleEnabled(false);
mToolbar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_gif, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.gif_menu_copy:
ClipboardManager clip = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
clip.setText(copy_url);
showToast("链接已复制:" + copy_url);
break;
case R.id.gif_menu_share:
showToast("客观,别急");
break;
case R.id.gif_menu_download:
String msg = "保存异常,";
try {
msg = PictureUtil.saveImage(copy_url, bitmap);
} catch (IOException e) {
msg += e.getMessage();
}
showToast(msg);
break;
}
return super.onOptionsItemSelected(item);
}
/**
* toast
* @param msg
*/
private void showToast(String msg) {
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}
/**
* 退出按钮
*/
@Override
public void onBackPressed() {
progressDialog.dismiss();
if (gifImageView != null) {
gifImageView.clear();
}
finish();
}
}
调用 实现 :
Intent intent = new Intent(MainLeActivity.this, TbMusicActivity.class);
intent.putExtra("url", url);
intent.putExtra("title",title );
startActivity(intent);