Android8.1 Camera2 ModePickerFragment中添加滤镜mode

一、隐藏Camera主界面的滤镜按钮
feature/setting/matrixdisplay/src/com/mediatek/camera/feature/setting/matrixdisplay/MatrixDisplay.java

public void refreshViewEntry() {
  if (mImageView != null) {
            if (getEntryValues().size() <= 1) {
                mImageView.setVisibility(View.GONE);
            } else {
                /*<20180709 OR by xza 0000090 begin>*/
        //总是隐藏滤镜按钮
                //mImageView.setVisibility(View.VISIBLE);
                mImageView.setVisibility(View.GONE);
                /*<20180709 OR by xza 0000090 end>*/
            }
        }
}

二、获取滤镜控件
host/src/com/mediatek/camera/ui/EffectViewManager.java

/*<20180709 OR by xza 0000090>*/
public View getViewEtry(){
   return mViewEntry;
}

host/src/com/mediatek/camera/ui/CameraAppUI.java

/*<20180709 OR by xza 0000090 begin>*/
//获取滤镜控件
public View getEffectViewEntry(){
    return mEffectViewManager.getViewEtry();
}
/*<20180709 OR by xza 0000090 end>*/

host/src/com/mediatek/camera/CameraActivity.java

/*<20180709 OR by xza 0000090  begin> */
//获取滤镜控件
    public View getEffectView(){
        return mCameraAppUI.getEffectViewEntry();
    }
/*<20180709 OR by xza 0000090 begin>*/

三、ModePickerFragment中添加滤镜按钮点击事件
host/src/com/mediatek/camera/ui/modepicker/ModePickerFragment.java

/*<20180709 OR by xza 0000090>*/
private View mEffectView;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
        ......
    /*<20180709 OR by xza 0000090>*/
        mEffectView=((CameraActivity)getActivity()).getEffectView();
        ......
        return view;
}

private class OnViewItemClickListenerImpl implements ModeItemAdapter.OnViewItemClickListener {
     @Override
        public boolean onItemCLicked(ModePickerManager.ModeInfo modeInfo) {
        ......  
    }
    /*<20180709 OR by xza 0000090 begin>*/
        @Override
        public void onItemEffectClick(View view){
            ModePickerFragment.this.getActivity().getFragmentManager().popBackStack();
            if(mEffectView!=null&&!mCurrentModeName.equals(
            getActivity().getResources().getString(R.string.slow_motion_title)))
                mEffectView.performClick();
            }
        }
        /*<20180709 OR by xza 0000090 end>*/
}

六、在Adpater中添加滤镜item,并且注册点击事件
host/src/com/mediatek/camera/ui/modepicker/ModeItemAdapter.java

public enum ITEM_TYPE {
    ITEM_TYPE_IMAGE,
    /*<20180709 OR by xza 0000090 begin>*/
    //添加滤镜类型
    ITEM_TYPE_EFFECT
    /*<20180709 OR by xza 0000090 end>*/
}
public interface  OnViewItemClickListener {
    boolean onItemCLicked(ModePickerManager.ModeInfo modeInfo);
    /*<20180709 OR by xza 0000090 begin>*/
    void onItemEffectClick(View view);
    /*<20180709 OR by xza 0000090 end>*/
}
 @Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    /*<20180709 OR by xza 0000090 begin>*/
    //根据类型,返回不同布局
//        return new ModeViewHolder(mLayoutInflater.inflate(R.layout.mode_item, parent, false));
    if(viewType == ITEM_TYPE.ITEM_TYPE_IMAGE.ordinal()){
        return new ModeViewHolder(mLayoutInflater.inflate(R.layout.mode_item, parent, false));
    }else{
        return new EffectViewHold(mLayoutInflater.inflate(R.layout.mode_item_effect, parent, false));
    }
    /*<20180709 OR by xza 0000090 end>*/
}

 @Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    ......
    /*<20180709 OR by xza 0000090 begin>*/
    //初始化滤镜viewholder
    else if(holder instanceof  EffectViewHold){
        ((EffectViewHold) holder).mEffectTextView.setText("滤镜");
        ((EffectViewHold) holder).mEffectImageView.setImageResource(R.drawable.ic_matrix_display_entry);
    }
    /*<20180709 OR by xza 0000090 end>*/
}
 @Override
public int getItemViewType(int position) {
    /*<20180709 OR by xza 0000090 begin>*/
    //判断如果是最后一个item,则返回滤镜的类型
//        return ITEM_TYPE.ITEM_TYPE_IMAGE.ordinal();
    if(getItemCount()!=0&&position==getItemCount()-1){
        return ITEM_TYPE.ITEM_TYPE_EFFECT.ordinal();
    }else{
        return ITEM_TYPE.ITEM_TYPE_IMAGE.ordinal();
    }
    /*<20180709 OR by xza 0000090 end>*/
}
@Override
 public int getItemCount() {
     /*<20180709 OR by xza 0000090 begin>*/
     //为滤镜添加一个item
//        return  mModes == null ? 0 : mModes.size();
     return  mModes == null ? 0 : mModes.size()+1;
     /*<20180709 OR by xza 0000090 end>*/
 }

/*<20180709 OR by xza 0000090 begin>*/
//滤镜的viewholder,并且注册点击事件
private class EffectViewHold extends RecyclerView.ViewHolder
        implements View.OnClickListener{
    TextView mEffectTextView;
    ImageView mEffectImageView;
    View mEffectModeView;
    EffectViewHold (View view) {
        super(view);
        mEffectModeView = view;
        mEffectTextView = (TextView) view.findViewById(R.id.text_effect_view);
        mEffectImageView = (ImageView) view.findViewById(R.id.image_effect_view);
        view.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        mClickedListener.onItemEffectClick(mEffectModeView);
    }

}
/*<20180709 OR by xza 0000090 end>*/
host/res/layout/mode_item_effect.xml
<?xml version="1.0" encoding="utf-8"?>
<!--20180709 OR by xza 0000091 add-->
<com.mediatek.camera.ui.modepicker.RotateLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_centerInParent="true">
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    <RelativeLayout
        android:id="@+id/selector_item"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center">

            <android.support.v7.widget.AppCompatImageView
                android:id="@+id/image_view"
                android:layout_width="64dp"
                android:layout_height="64dp"
                android:layout_centerHorizontal="true"
                android:scaleType="fitXY"
                app:srcCompat="@drawable/ic_normal_mode_unselected" />

        <TextView
            android:id="@+id/text_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/image_view"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="10dp"
            android:textColor="@android:color/white"
            android:textSize="18dp" />
    </RelativeLayout>
    </FrameLayout>
</com.mediatek.camera.ui.modepicker.RotateLayout>

因为对底层代码不熟悉,所以只是修改了上层应用部分,个人感觉从底层修
改添加mode会更合适。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值