android相机添加一层图片,android 在照片上加标签(贴纸标签相机)源码
【实例简介】功能:拍照,相片裁剪,给图片贴贴纸,打标签
实现相机功能
实现对图片进行裁剪的功能
图片的滤镜功能
能为图片添加贴纸(贴纸可移动,放大,旋转)
能为图片添加标签(同样可以移动)
本地保存制作好的图片,并展示
【实例截图】
【核心代码】
package com.stickercamera.app.ui;
import android.graphics.BitmapFactory;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.CardView;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.alibaba.fastjson.JSON;
import com.common.util.DataUtils;
import com.common.util.FileUtils;
import com.common.util.StringUtils;
import com.customview.LabelView;
import com.github.skykai.stickercamera.R;
import com.melnykov.fab.FloatingActionButton;
import com.stickercamera.App;
import com.stickercamera.AppConstants;
import com.stickercamera.app.camera.CameraManager;
import com.stickercamera.app.model.FeedItem;
import com.stickercamera.app.model.TagItem;
import com.stickercamera.base.BaseActivity;
import org.json.JSONArray;
import java.util.ArrayList;
import java.util.List;
import butterknife.ButterKnife;
import butterknife.InjectView;
import de.greenrobot.event.EventBus;
/**
* 主界面
* Created by sky on 2015/7/20.
* Weibo: http://weibo.com/2030683111
* Email: 1132234509@qq.com
*/
public class MainActivity extends BaseActivity {
@InjectView(R.id.fab)
FloatingActionButton fab;
@InjectView(R.id.recycler_view)
RecyclerView mRecyclerView;
private List feedList;
private PictureAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.inject(this);
EventBus.getDefault().register(this);
initView();
//如果没有照片则打开相机
String str = DataUtils.getStringPreferences(App.getApp(), AppConstants.FEED_INFO);
if (StringUtils.isNotEmpty(str)) {
feedList = JSON.parseArray(str, FeedItem.class);
}
if (feedList == null) {
CameraManager.getInst().openCamera(MainActivity.this);
} else {
mAdapter.setList(feedList);
}
}
public void onEventMainThread(FeedItem feedItem) {
if (feedList == null) {
feedList = new ArrayList();
}
feedList.add(0, feedItem);
DataUtils.setStringPreferences(App.getApp(), AppConstants.FEED_INFO, JSON.toJSONString(feedList));
mAdapter.setList(feedList);
mAdapter.notifyDataSetChanged();
}
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
private void initView() {
titleBar.hideLeftBtn();
titleBar.hideRightBtn();
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mAdapter = new PictureAdapter();
mRecyclerView.setAdapter(mAdapter);
fab.setOnClickListener(v -> CameraManager.getInst().openCamera(MainActivity.this));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
//照片适配器
public class PictureAdapter extends RecyclerView.Adapter {
private List items = new ArrayList();
public void setList(List list) {
if (items.size() > 0) {
items.clear();
}
items.addAll(list);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_picture, parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
FeedItem feedItem = items.get(position);
holder.picture.setImageBitmap(BitmapFactory.decodeFile(feedItem.getImgPath()));
holder.setTagList(feedItem.getTagList());
}
@Override
public int getItemCount() {
return items.size();
}
@Override
public void onViewRecycled(ViewHolder holder) {
// 将标签移除,避免回收使用时标签重复
holder.pictureLayout.removeViews(1, holder.pictureLayout.getChildCount() - 1);
super.onViewRecycled(holder);
}
@Override
public void onViewAttachedToWindow(ViewHolder holder) {
super.onViewAttachedToWindow(holder);
// 这里可能有问题 延迟200毫秒加载是为了等pictureLayout已经在屏幕上显示getWidth才为具体的值
holder.pictureLayout.getHandler().postDelayed(new Runnable() {
@Override
public void run() {
for (TagItem feedImageTag : holder.getTagList()) {
LabelView tagview = new LabelView(MainActivity.this);
tagview.init(feedImageTag);
tagview.draw(holder.pictureLayout,
(int) (feedImageTag.getX() * ((double) holder.pictureLayout.getWidth() / (double) 1242)),
(int) (feedImageTag.getY() * ((double) holder.pictureLayout.getWidth() / (double) 1242)),
feedImageTag.isLeft());
}
}
}, 200);
}
}
public static class ViewHolder extends RecyclerView.ViewHolder {
@InjectView(R.id.pictureLayout)
RelativeLayout pictureLayout;
@InjectView(R.id.picture)
ImageView picture;
private List tagList = new ArrayList<>();
public List getTagList() {
return tagList;
}
public void setTagList(List tagList) {
if (this.tagList.size() > 0) {
this.tagList.clear();
}
this.tagList.addAll(tagList);
}
public ViewHolder(View itemView) {
super(itemView);
ButterKnife.inject(this, itemView);
}
}
}
android相机添加一层图片,android 在照片上加标签(贴纸标签相机)源码相关推荐
- 怎样在android中添加背景图片?
怎样在android中添加背景图片? 1.打开左侧的工程文件夹.打开res中的layout,双击main.xml. 2.一般的图片是jpg格式的,要把格式转化为png格式的. 3.把PNG格式的图片拖 ...
- java实现高德地图app,Android 高德地图入门demo,最新高德地图实现方法,附源码及apk...
[实例简介] Android 高德地图入门demo,最新高德地图实现方法,附源码及apk [实例截图] [核心代码] GaoDeDemo ├── GaoDeDemo │ ├── app │ │ ...
- android flv 编码器,Android 音视频深入 十七 FFmpeg 获取 RTMP 流保存为 flv (附源码下载)...
Android 音视频深入 十七 FFmpeg 获取 RTMP 流保存为 flv (附源码下载) 项目地址 https://github.com/979451341/RtmpSave 这个项目主要代码 ...
- Android 小应用之一个activity实现简易手电筒(内附免费源码)
Android小应用之一个activity实现简易手电筒(内附免费源码) 1.activity代码 2.xml代码 3.资源文件代码 4.源码压缩包(免费) 今天爷爷说他手机更新之后找不到手电筒了,我 ...
- 图片加载框架Picasso - 源码分析
简书:图片加载框架Picasso - 源码分析 前一篇文章讲了Picasso的详细用法,Picasso 是一个强大的图片加载缓存框架,一个非常优秀的开源库,学习一个优秀的开源库,,我们不仅仅是学习它的 ...
- swiper图片轮播(左中右) (含源码)- 案例篇
swiper图片轮播(左中右) (含源码) - 案例篇 效果图: 代码: <!DOCTYPE html> <html lang="en"> <head ...
- css实现的图片列表切换轮播特效html页面前端源码
大家好,今天给大家介绍一款, css实现的图片列表切换轮播特效html页面前端源码(图1).送给大家哦,获取方式在本文末尾. 图1 特效非常炫酷,可以用于制造音乐播放切换或视频播放切换前端(图2) 图 ...
- android编程 自动裁剪图片,Android编程实现调用相册、相机及拍照后直接裁剪的方法...
本文实例讲述了Android编程实现调用相册.相机及拍照后直接裁剪的方法.分享给大家供大家参考,具体如下: package com.cvte.health.phone; import java.io. ...
- 【Android 安装包优化】Android 中使用 SVG 图片 ( Android 5.0 以下的矢量图方案 | 矢量图生成为 PNG 图片 )
文章目录 一.Android 5.0 以下的矢量图方案 二.矢量图生成为 PNG 图片 三.完整的 build.gradle 构建脚本 四.编译效果 五.参考资料 一.Android 5.0 以下的矢 ...
最新文章
- 启动马达接线实物图_电工知识:三相电机正反转的完整接线,实物讲解,原理分析...
- Entity Framework
- 正确理解HTML,XHTML页面的头部doctype定义
- nginx alias
- 电影编码JPEG2000与H.264
- python安装详细步骤mac_mac如何安装python3
- Mybatis 中文文档
- 教你win10忘记密码强制重置密码的方法
- Java+AutoCAD-坐标系转换
- 今日金融词汇---股价复权,是什么?
- CRM软件成功案例解析
- 多微博账号同时发微博的插件--fawave
- GB2312编码范围
- 【CAN】PCAN连线
- matlab 空间曲面的绘制
- JWT详细教程与使用
- 省一级计算机ppt,江苏省计算机一级PPT课件.ppt
- 直播 | 乐高式微服务化改造
- GripSeal格雷希尔G80系列内螺纹快速接头的使用方法 G80L-M10 M12
- 高考失利只能进清华,35岁成阿里最年轻技术副总裁,他来自另一个平行世界!...
热门文章
- tensorflow之神经网络层:Dense,dense,Dropout,dropout
- 继承FlexboxLayout自定义可自动换行的tag标签
- TDengine 应用实录:存储缩减超过 60%,HBase 等集群指数级下线
- SpringBoot 项目小彩蛋--启动标识与启动成功标识
- 洛谷--P1827 [USACO3.4]美国血统 American Heritage
- c语言open函数打开文件方式,Linux中C语言open函数打开或创建文件详细讲解
- Excel 2010 SQL应用086 随机排序
- 5分钟从零搭建OpenVPN服务器
- Sql server 期末知识点复习
- 编译前奏:高级程序设计语言概述