Skip to content

challvy/FlowerStory

Repository files navigation

FlowerStory

Download

Introduce

Flower Story is an Android App project that provides flower recognition service.

Environment

Gradle

gradle: 3.2.1
distributionUrl=http\://services.gradle.org/distributions/gradle-4.6-all.zip

Android SDK

compileSdkVersion: 28
buildToolsVersion '28.0.3'
minSdkVersion 21
targetSdkVersion 28

Dependencies

implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:design:28.0.0'
implementation 'com.android.support:cardview-v7:28.0.0'
implementation 'com.squareup.okhttp3:okhttp:3.10.0'

Android Version of User's Phone

Android Version >= 6.0.1

Design

Camera Module

android.hardware.camera2

  • Flowchart of Camera2

CameraFlowchart

  • Set Brightness
public void setBrightness(double value) {
    minCompensationRange = range.getLower();
    maxCompensationRange = range.getUpper();
    int brightness = (int) (minCompensationRange + (maxCompensationRange - minCompensationRange)*(value/100.0f));
    mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, brightness);
    mCameraCaptureSession.setRepeatingRequest(mPreviewRequestBuilder.build(), mCaptureCallback, mBackgroundHandler);
}
  • Zoom
Set mTextureView.setOnTouchListener(textTureOntuchListener);
Override the onTouch() function;
PreviewRequestBuilder.set(CaptureRequest.SCALER_CROP_REGION,Rect);

Network Module

  • Get
import okhttp3.*;
import org.json.*;

Request request = new Request.Builder()
	.url(URL)
	.build();
Call call = new OkHttpClient().newCall(request);
call.enqueue(new Callback() {
    @Override
    public void onFailure(Call arg0, IOException e) {…}
    
    @Override
    public void onResponse(Call call, Response response) throws IOException {
        String jsonData = response.body().string();
	Message.obtain(mUIHandler,GET_FROM_URL,jsonData).sendToTarget();
    }
});
  • Post
import okhttp3.*;
import org.json.*;

OkHttpClient mOkHttpClient = new OkHttpClient();
RequestBody fileBody = RequestBody.create(TYPE, mFile);
RequestBody requestBody = new MultipartBody.Builder()
        .setType(MultipartBody.FORM)
        .addFormDataPart(KEY_PARA, VALUE_PARA)
        .addFormDataPart(KEY_FILE, VALUE_FILENAME, fileBody)
        .build();
Request request = new Request.Builder()
	.url(URL)
	.post(requestBody)
    	.build();
Call call = mOkHttpClient.newCall(request);
call.enqueue(new Callback() {
    @Override
    public void onFailure(Call arg0, IOException e) {…}
    
    @Override
    public void onResponse(Call call, Response response) throws IOException {
	Message.obtain(mUIHandler,MESSAGE_URL,response.body().string()).sendToTarget();
    }
});
  • Lazy Load
public class ItemFragment extends Fragment {
    private boolean isFragmentVisible;
    private boolean isFirstVisible;
    private View rootView;
    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (rootView == null) return;
        if (isFirstVisible && isVisibleToUser) {
            onFragmentFirstVisible();
            isFirstVisible = false;
        }
        if (isVisibleToUser) {
            onFragmentVisibleChange(true);
            isFragmentVisible = true;
            return;
        }
        if (isFragmentVisible()) {
            isFragmentVisible = false;
            onFragmentVisibleChange(false);
        }
    }
}
  • Pagination
mRecyclerView.addOnScrollListener(new RecyclerView .OnScrollListener(){
    @Override
    public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
	super.onScrollStateChanged(recyclerView, newState);
        if (newState==RecyclerView.SCROLL_STATE_IDLE) {
            if(!mAdapter.isFadeTips()&&lastVisibleItem+1== mAdapter.getItemCount()) {
		updateRecyclerView(mAdapter.getRealLastPosition(), mAdapter.getRealLastPosition() + PAGE_COUNT);
            }
            if (mAdapter.isFadeTips() && lastVisibleItem + 2 == mAdapter.getItemCount()) {
                updateRecyclerView(mAdapter.getRealLastPosition(), mAdapter.getRealLastPosition()+PAGE_COUNT);
            }
        }
    }
    
    @Override
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
	super.onScrolled(recyclerView, dx, dy);
        lastVisibleItem= mLayoutManager.findLastVisibleItemPosition();
    }
});

Reference

Demo

End

If you have any problem, please contact challvy.tee@gmail.com.

About

An Android App project that provides flower recognition service.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages