智障家居之智障烧水装备----安卓App端的代码

智障家居之智障烧水装备----安卓App端的代码

App预览

在这里插入图片描述

工具类

在这个项目中,工具类主要使用到了GlideHelper(用于加载图片),Painting(用于配置ListView的数据),PaintingsAdapter(ListView的适配器)。

GlideHelper

直接给出代码

public class GlideHelper {

    private GlideHelper() {}

    public static void loadPaintingImage(ImageView image, Painting painting) {
        Glide.with(image.getContext().getApplicationContext())
                .load(painting.getImageId())
                .dontAnimate()
                .diskCacheStrategy(DiskCacheStrategy.NONE)
                .into(image);
    }

}

Painting

public class Painting {

    private final int imageId;
    private final String title;
    private final int paintId;

    private Painting(int imageId, String title, int paintId) {
        this.imageId = imageId;
        this.title = title;
        this.paintId = paintId;
    }

    public int getImageId() {
        return imageId;
    }

    public String getTitle() {
        return title;
    }

    public int getPaintId() { return paintId;}

    public static Painting[] getAllPaintings(Resources res) {
        // 读取资源文件中的数据
        String[] titles = res.getStringArray(R.array.paintings_titles);
        TypedArray images = res.obtainTypedArray(R.array.paintings_images);

        int size = titles.length;
        Painting[] paintings = new Painting[size];

        for (int i = 0; i < size; i++) {
            final int imageId = images.getResourceId(i, -1);
            paintings[i] = new Painting(imageId, titles[i], i);
        }

        images.recycle();

        return paintings;
    }

}

PaintingsAdapter

public class PaintingsAdapter extends ItemsAdapter<Painting, PaintingsAdapter.ViewHolder>
        implements View.OnClickListener {

    public PaintingsAdapter(Context context) {
        setItemsList(Arrays.asList(Painting.getAllPaintings(context.getResources())));
    }

    @Override
    protected ViewHolder onCreateHolder(ViewGroup parent, int viewType) {
        final ViewHolder holder = new ViewHolder(parent);
        holder.image.setOnClickListener(this);
        return holder;
    }

    @Override
    protected void onBindHolder(ViewHolder holder, int position) {
        final Painting item = getItem(position);

        holder.image.setTag(R.id.list_item_image, item);
        GlideHelper.loadPaintingImage(holder.image, item);
        holder.title.setText(item.getTitle());
    }

    @Override
    public void onClick(View view) {
        final Painting item = (Painting) view.getTag(R.id.list_item_image);
        final Activity activity = ContextHelper.asActivity(view.getContext());

        if (activity instanceof MainActivity) {
            ((MainActivity) activity).openDetails(view, item);
        }
    }

    static class ViewHolder extends ItemsAdapter.ViewHolder {
        final ImageView image;
        final TextView title;

        ViewHolder(ViewGroup parent) {
            super(Views.inflate(parent, R.layout.list_item));
            image = Views.find(itemView, R.id.list_item_image);
            title = Views.find(itemView, R.id.list_item_title);
        }
    }

}

主类

代码也好理解

public class MainActivity extends AppCompatActivity {

    // updata
    private final int[] activity_id = {R.id.one, R.id.one, R.id.one, R.id.one, R.id.one};

    private View listTouchInterceptor;
    private View detailsLayout;
    private UnfoldableView unfoldableView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        getSupportActionBar().hide();

        ListView listView = Views.find(this, R.id.list_view);
        listView.setAdapter(new PaintingsAdapter(this));

        listTouchInterceptor = Views.find(this, R.id.touch_interceptor_view);
        listTouchInterceptor.setClickable(false);

        // 点开item后的页面布局
        detailsLayout = Views.find(this, R.id.details_layout);
        detailsLayout.setVisibility(View.INVISIBLE);

        unfoldableView = Views.find(this, R.id.unfoldable_view);

        // 加载闪光图
        Bitmap glance = BitmapFactory.decodeResource(getResources(), R.drawable.unfold_glance);
        unfoldableView.setFoldShading(new GlanceFoldShading(glance));

        unfoldableView.setOnFoldingListener(new UnfoldableView.SimpleFoldingListener() {
            @Override
            public void onUnfolding(UnfoldableView unfoldableView) {
                listTouchInterceptor.setClickable(true);
                detailsLayout.setVisibility(View.VISIBLE);
            }

            @Override
            public void onUnfolded(UnfoldableView unfoldableView) {
                listTouchInterceptor.setClickable(false);
            }

            @Override
            public void onFoldingBack(UnfoldableView unfoldableView) {
                listTouchInterceptor.setClickable(true);
            }

            @Override
            public void onFoldedBack(UnfoldableView unfoldableView) {
                listTouchInterceptor.setClickable(false);
                detailsLayout.setVisibility(View.INVISIBLE);
            }
        });
    }

    // 点击卡片后调用
    public void openDetails(View coverView, Painting painting) {
        final ImageView image = Views.find(detailsLayout, R.id.details_image);
        final int activityID = painting.getPaintId();

        GlideHelper.loadPaintingImage(image, painting);

        // 取得页面的include控件,并隐藏
        for (int value : activity_id) {
            View tempView = Views.find(detailsLayout, value);
            tempView.setVisibility(View.GONE);
        }

        // updata
        switch (activityID) {
            case 0:
                View curView = Views.find(detailsLayout, activity_id[0]);
                curView.setVisibility(View.VISIBLE);
                OneActivity test =  new OneActivity();
                test.OneInit(curView);
                break;
            case 1:
                break;
            default:
                break;
        }
		// 卡片翻转并打开
        unfoldableView.unfold(coverView, detailsLayout);
    }
}

其中使用到了drawable文件夹中的unfold_glance文件,因此,需要将该文件加入drawable文件中
在这里插入图片描述

智障烧水装备类

public class OneActivity {

    private TextView text;
    private EditText inputPin;
    private EditText inputAngle;
    //1,创建OKhttpClient对象
    private final OkHttpClient client = new OkHttpClient();
    private View curView;

    void OneInit(View curView) {

        Button button = (Button) curView.findViewById(R.id.button2);
        text = (TextView)curView.findViewById(R.id.textView4);
        button.setOnClickListener(new buttonAction());
        inputPin = (EditText)curView.findViewById(R.id.editTextNumberSigned);
        inputAngle = (EditText)curView.findViewById(R.id.editTextNumberSigned2);

        this.curView  = curView;
    }

    class buttonAction implements View.OnClickListener {
        @Override
        public void onClick(View view) {
            String pin = inputPin.getText().toString();
            String angle = inputAngle.getText().toString();

            postRequest(pin, angle);
        }

        private void postRequest(String pin, String angle) {
            String url = "http://192.168.1.42:5000/tasks";

            //2,创建Request
            RequestBody formBody = new FormBody.Builder()
                    .add("pin",pin)
                    .add("angle",angle)
                    .build();

            Request request = new Request.Builder().url(url).post(formBody).build();
            //3,创建call对象并将请求对象添加到调度中
            client.newCall(request).enqueue(new Callback() {
                @Override
                public void onResponse(Call call, Response response) throws IOException {
                    String content = response.body().string();
                    // 需要到UI线程进行UI的更新
                    curView.post(new Runnable() {
                        @Override
                        public void run() {
                            text.setText(content);
                        }
                    });
                }
                @Override
                public void onFailure(Call call, IOException e) {
                    Log.e("测试", e+"");
                }
            });
        }
    }

}

完整的工程文件可以在这里进行下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值