单手操作图片控件 镜像、置顶、缩放、移动:StickerView
来源:互联网 发布:单片机LED接线 编辑:程序博客网 时间:2024/04/26 13:29
单手操作图片控件 镜像、置顶、缩放、移动
http://www.23code.com/imageprocessing/
ImageProcessing这个贴纸Demo是基于 http://blog.isming.me/2015/05/10/sticker-view/ 现有基础的优化。
优化内容
1、加入了多张贴纸功能
2、对于贴纸边界的判断
import android.content.Intent;import android.graphics.Bitmap;import android.graphics.Canvas;import android.os.Bundle;import android.support.design.widget.FloatingActionButton;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.Toolbar;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.RelativeLayout; import com.example.abner.stickerdemo.utils.FileUtils;import com.example.abner.stickerdemo.view.StickerView; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { //当前处于编辑状态的贴纸 private StickerView mCurrentView; //存储贴纸列表 private ArrayList<View> mStickers; private RelativeLayout mContentRootView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mContentRootView = (RelativeLayout) findViewById(R.id.rl_content_root); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { addStickerView(); } }); mStickers = new ArrayList<>(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_complete) { mCurrentView.setInEdit(false); generateBitmap(); return true; } return super.onOptionsItemSelected(item); } //添加表情 private void addStickerView() { final StickerView stickerView = new StickerView(this); stickerView.setImageResource(R.mipmap.ic_cat); stickerView.setOperationListener(new StickerView.OperationListener() { @Override public void onDeleteClick() { mStickers.remove(stickerView); mContentRootView.removeView(stickerView); } @Override public void onEdit(StickerView stickerView) { mCurrentView.setInEdit(false); mCurrentView = stickerView; mCurrentView.setInEdit(true); } @Override public void onTop(StickerView stickerView) { int position = mStickers.indexOf(stickerView); if (position == mStickers.size() - 1) { return; } StickerView stickerTemp = (StickerView) mStickers.remove(position); mStickers.add(mStickers.size(), stickerTemp); } }); RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT); mContentRootView.addView(stickerView, lp); mStickers.add(stickerView); setCurrentEdit(stickerView); } /** * 设置当前处于编辑模式的贴纸 */ private void setCurrentEdit(StickerView stickerView) { if (mCurrentView != null) { mCurrentView.setInEdit(false); } mCurrentView = stickerView; stickerView.setInEdit(true); } private void generateBitmap() { Bitmap bitmap = Bitmap.createBitmap(mContentRootView.getWidth(), mContentRootView.getHeight() , Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); mContentRootView.draw(canvas); String iamgePath = FileUtils.saveBitmapToLocal(bitmap, this); Intent intent = new Intent(this, DisplayActivity.class); intent.putExtra("image", iamgePath); startActivity(intent); } }
http://www.23code.com/imageprocessing/
ImageProcessing这个贴纸Demo是基于 http://blog.isming.me/2015/05/10/sticker-view/ 现有基础的优化。
优化内容
1、加入了多张贴纸功能
2、对于贴纸边界的判断