ソースを参照

添加第三方涂鸦成功

zengjiebin 7 年 前
コミット
c729115c4d

+ 1 - 0
media/app/build.gradle

@@ -90,6 +90,7 @@ dependencies {
     implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34'
     //fast json
     implementation 'com.alibaba:fastjson:1.2.52'
+    implementation 'com.github.1993hzw:Doodle:5.3'
 }
 
 

+ 15 - 0
media/app/src/main/java/com/kfzs/cfyl/media/activity/ActCutVideo.java

@@ -5,6 +5,7 @@ import android.media.MediaPlayer;
 import android.net.Uri;
 import android.support.v4.app.Fragment;
 import android.util.Log;
+import android.view.MotionEvent;
 import android.view.View;
 
 import com.alibaba.fastjson.JSONObject;
@@ -170,4 +171,18 @@ public class ActCutVideo extends BaseListFgtActivity implements IdChooser {
             data.setTopicIndex(id);
         }
     }
+
+    private View curTouchView;
+
+    public void setCurTouchView(View curTouchView) {
+        this.curTouchView = curTouchView;
+    }
+
+    @Override
+    public boolean onTouchEvent(MotionEvent event) {
+        if(curTouchView != null){
+            return curTouchView.onTouchEvent(event);
+        }
+        return super.onTouchEvent(event);
+    }
 }

+ 20 - 0
media/app/src/main/java/com/kfzs/cfyl/media/fragment/FgtColorList.java

@@ -0,0 +1,20 @@
+package com.kfzs.cfyl.media.fragment;
+
+
+import com.kfzs.cfyl.media.BaseFragment;
+import com.kfzs.cfyl.media.R;
+
+/**
+ * Created by realicing on 2018/12/20.
+ * realicing@sina.com
+ */
+public class FgtColorList extends BaseFragment {
+    @Override
+    public int getLayoutId() {
+        return R.layout.media_common_rv;
+    }
+
+    @Override
+    public void onViewCreated() {
+    }
+}

+ 140 - 4
media/app/src/main/java/com/kfzs/cfyl/media/fragment/FgtDoodle.java

@@ -1,14 +1,42 @@
 package com.kfzs.cfyl.media.fragment;
 
 import android.app.Activity;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Color;
 import android.support.v4.app.Fragment;
+import android.support.v4.view.ViewPager;
 import android.view.View;
+import android.view.ViewGroup;
 import android.widget.ImageView;
 
 import com.kfzs.cfyl.media.BaseFragment;
 import com.kfzs.cfyl.media.BaseListFgtActivity;
 import com.kfzs.cfyl.media.BaseListFgtFgt;
 import com.kfzs.cfyl.media.R;
+import com.kfzs.cfyl.media.adapter.ViewPagerFragmentAdapter;
+import com.kfzs.cfyl.media.util.G;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import cn.hzw.doodle.DoodleActivity;
+import cn.hzw.doodle.DoodleBitmap;
+import cn.hzw.doodle.DoodleColor;
+import cn.hzw.doodle.DoodleOnTouchGestureListener;
+import cn.hzw.doodle.DoodleParams;
+import cn.hzw.doodle.DoodlePen;
+import cn.hzw.doodle.DoodleShape;
+import cn.hzw.doodle.DoodleText;
+import cn.hzw.doodle.DoodleTouchDetector;
+import cn.hzw.doodle.DoodleView;
+import cn.hzw.doodle.IDoodleListener;
+import cn.hzw.doodle.core.IDoodle;
+import cn.hzw.doodle.core.IDoodlePen;
+import cn.hzw.doodle.core.IDoodleSelectableItem;
+import cn.hzw.doodle.core.IDoodleTouchDetector;
 
 /**
  * Created by realicing on 2018/12/20.
@@ -21,8 +49,19 @@ public class FgtDoodle extends BaseFragment {
         return R.layout.media_fgt_doodle;
     }
 
+    private ViewPager media_viewPager;
     @Override
     public void onViewCreated() {
+        media_viewPager = findViewById(R.id.media_viewPager);
+
+        List<Fragment> fragmentList = new ArrayList<>();
+        fragmentList.add(new FgtColorList());
+        ViewPagerFragmentAdapter mViewPagerFragmentAdapter = new ViewPagerFragmentAdapter(getChildFragmentManager(), fragmentList);
+        media_viewPager.setAdapter(mViewPagerFragmentAdapter);
+        media_viewPager.setOffscreenPageLimit(mViewPagerFragmentAdapter.getCount());
+
+        ViewGroup media_fgt_doodle_container = findViewById(R.id.media_fgt_doodle_container);
+        initDoodleView(media_fgt_doodle_container);
 
         ImageView media_video_back_iv = findViewById(R.id.media_video_back_iv);
         media_video_back_iv.setOnClickListener(new View.OnClickListener() {
@@ -40,24 +79,121 @@ public class FgtDoodle extends BaseFragment {
             }
         });
     }
+
     //点击返回
     public void onClickBackImg(View view) {
         Activity activity = getActivity();
-        if(activity instanceof BaseListFgtActivity){
+        if (activity instanceof BaseListFgtActivity) {
             Fragment fragment = ((BaseListFgtActivity) activity).getFgtByPosition(FgtEditVideoTypeList.POSITION);
-            if(fragment instanceof BaseListFgtFgt){
-                if(((BaseListFgtFgt) fragment).switchLastFgt()){
+            if (fragment instanceof BaseListFgtFgt) {
+                if (((BaseListFgtFgt) fragment).switchLastFgt()) {
                     return;
                 }
             }
             onClickNext(view);
         }
     }
+
     //点击下一步
     public void onClickNext(View view) {
         Activity activity = getActivity();
-        if(activity instanceof BaseListFgtActivity){
+        if (activity instanceof BaseListFgtActivity) {
             ((BaseListFgtActivity) activity).switchFgt(FgtEditVideoTypeList.POSITION, this);
         }
     }
+
+
+    private void initDoodleView(ViewGroup media_fgt_doodle_container) {
+        // 涂鸦参数
+        mDoodleParams = new DoodleParams();
+        mDoodleParams.mIsFullScreen = true;
+        mDoodleParams.mIsDrawableOutside = true;
+        // 初始画笔大小
+        mDoodleParams.mPaintUnitSize = DoodleView.DEFAULT_SIZE;
+        final Bitmap bitmap = Bitmap.createBitmap(G.WIDTH, G.HEIGHT, Bitmap.Config.ARGB_4444);
+        mDoodle = mDoodleView = new DoodleView(media_fgt_doodle_container.getContext(), bitmap, new IDoodleListener() {
+            /*
+            called when save the doodled iamge.
+            保存涂鸦图像时调用
+             */
+            @Override
+            public void onSaved(IDoodle doodle, Bitmap bitmap, Runnable callback) {
+                //do something
+            }
+
+            /*
+             called when it is ready to doodle because the view has been measured. Now, you can set size, color, pen, shape, etc.
+             此时view已经测量完成,涂鸦前的准备工作已经完成,在这里可以设置大小、颜色、画笔、形状等。
+             */
+            @Override
+            public void onReady(IDoodle doodle) {
+                float size = mDoodleParams.mPaintUnitSize > 0 ? mDoodleParams.mPaintUnitSize * mDoodle.getUnitSize() : 0;
+                if (size <= 0) {
+                    size = mDoodleParams.mPaintPixelSize > 0 ? mDoodleParams.mPaintPixelSize : mDoodle.getSize();
+                }
+                // 设置初始值
+                mDoodle.setSize(size);
+                // 选择画笔
+                mDoodle.setPen(DoodlePen.BRUSH);
+                mDoodle.setShape(DoodleShape.HAND_WRITE);
+                if (mDoodleParams.mZoomerScale <= 0) {
+                    findViewById(cn.hzw.doodle.R.id.btn_zoomer).setVisibility(View.GONE);
+                }
+                mDoodle.setZoomerScale(mDoodleParams.mZoomerScale);
+
+                // 每个画笔的初始值
+                mPenSizeMap.put(DoodlePen.BRUSH, mDoodle.getSize());
+                mPenSizeMap.put(DoodlePen.COPY, DoodleActivity.DEFAULT_COPY_SIZE * mDoodle.getUnitSize());
+                mPenSizeMap.put(DoodlePen.ERASER, mDoodle.getSize());
+                mPenSizeMap.put(DoodlePen.TEXT, DoodleActivity.DEFAULT_TEXT_SIZE * mDoodle.getUnitSize());
+                mPenSizeMap.put(DoodlePen.BITMAP, DoodleActivity.DEFAULT_BITMAP_SIZE * mDoodle.getUnitSize());
+            }
+        });
+
+        mTouchGestureListener = new DoodleOnTouchGestureListener(mDoodleView, new DoodleOnTouchGestureListener.ISelectionListener() {
+            /*
+             called when the item(such as text, texture) is selected/unselected.
+             item(如文字,贴图)被选中或取消选中时回调
+             */
+            @Override
+            public void onSelectedItem(IDoodle doodle, IDoodleSelectableItem selectableItem, boolean selected) {
+                //do something
+            }
+
+            /*
+             called when you click the view to create a item(such as text, texture).
+             点击View中的某个点创建可选择的item(如文字,贴图)时回调
+             */
+            @Override
+            public void onCreateSelectableItem(IDoodle doodle, float x, float y) {
+                //do something
+                if (mDoodle.getPen() == DoodlePen.TEXT) {
+                    IDoodleSelectableItem item = new DoodleText(mDoodle, "hello", 20 * mDoodle.getUnitSize(), new DoodleColor(Color.RED), x, y);
+                    mDoodle.addItem(item);
+                } else if (mDoodle.getPen() == DoodlePen.BITMAP) {
+                    IDoodleSelectableItem item = new DoodleBitmap(mDoodle, bitmap, 80 * mDoodle.getUnitSize(), x, y);
+                    mDoodle.addItem(item);
+                }
+            }
+        });
+
+// create touch detector, which dectects the gesture of scoll, scale, single tap, etc.
+// 创建手势识别器,识别滚动,缩放,点击等手势
+        IDoodleTouchDetector detector = new DoodleTouchDetector(media_fgt_doodle_container.getContext(), mTouchGestureListener);
+        mDoodleView.setDefaultTouchDetector(detector);
+
+// Setting parameters.设置参数
+        mDoodleView.setPen(DoodlePen.TEXT);
+        mDoodleView.setShape(DoodleShape.HAND_WRITE);
+        mDoodleView.setColor(new DoodleColor(Color.RED));
+        mDoodle.setIsDrawableOutside(mDoodleParams.mIsDrawableOutside);
+
+        media_fgt_doodle_container.addView(mDoodleView, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
+    }
+
+    private DoodleView mDoodleView;
+    private IDoodle mDoodle;
+    private DoodleParams mDoodleParams;
+    private Map<IDoodlePen, Float> mPenSizeMap = new HashMap<>(); //保存每个画笔对应的最新大小
+    private DoodleOnTouchGestureListener mTouchGestureListener;
 }

+ 7 - 0
media/app/src/main/res/drawable/media_shape_oval_black.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <corners android:radius="20dp" />
+
+    <solid android:color="@color/media_black" />
+</shape>

+ 1 - 1
media/app/src/main/res/layout/media_common_rv.xml

@@ -2,5 +2,5 @@
 <android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/media_recyclerView"
     android:layout_width="match_parent"
-    android:layout_height="wrap_content"
+    android:layout_height="match_parent"
     android:descendantFocusability="blocksDescendants" />

+ 39 - 0
media/app/src/main/res/layout/media_fgt_color_list.xml

@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:gravity="center"
+    android:orientation="horizontal">
+
+    <View
+        android:layout_width="0dp"
+        android:layout_height="match_parent"
+        android:layout_weight="2" />
+
+    <ImageView
+        android:layout_width="18dp"
+        android:layout_height="18dp"
+        android:background="@drawable/media_shape_oval_white"/>
+
+    <View
+        android:layout_width="0dp"
+        android:layout_height="match_parent"
+        android:layout_weight="1" />
+    <ImageView
+        android:layout_width="18dp"
+        android:layout_height="18dp"
+        android:background="@drawable/media_shape_oval_black"/>
+    <View
+        android:layout_width="0dp"
+        android:layout_height="match_parent"
+        android:layout_weight="1" />
+    <ImageView
+        android:layout_width="18dp"
+        android:layout_height="18dp"
+        android:background="@drawable/media_shape_oval_red"/>
+
+    <View
+        android:layout_width="0dp"
+        android:layout_height="match_parent"
+        android:layout_weight="2" />
+</LinearLayout>

+ 17 - 4
media/app/src/main/res/layout/media_fgt_doodle.xml

@@ -4,6 +4,11 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent">
 
+    <FrameLayout
+        android:id="@+id/media_fgt_doodle_container"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" />
+
     <ImageView
         android:id="@+id/media_video_back_iv"
         android:layout_width="?attr/actionBarSize"
@@ -27,10 +32,18 @@
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintTop_toTopOf="parent" />
 
-    <android.support.v7.widget.RecyclerView
-        android:id="@+id/media_recyclerView"
-        android:layout_width="match_parent"
+    <ImageView
+        android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:descendantFocusability="blocksDescendants"
+        android:layout_marginStart="10dp"
+        android:layout_marginTop="10dp"
+        android:src="@drawable/media_sheep_logo_3"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/media_video_back_iv" />
+
+    <android.support.v4.view.ViewPager
+        android:id="@+id/media_viewPager"
+        android:layout_width="match_parent"
+        android:layout_height="100dp"
         app:layout_constraintBottom_toBottomOf="parent" />
 </android.support.constraint.ConstraintLayout>