智障家居之智障烧水装备----安卓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+"");
}
});
}
}
}
完整的工程文件可以在这里进行下载