Android開發————簡易App設計
阿新 • • 發佈:2018-12-20
實驗內容
1.點陣圖預覽
2.點陣圖資料傳遞顯示
實驗步驟
活動1:
Xml:
<?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:orientation="vertical" android:gravity="left" > <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="新增備忘錄內容" android:onClick="onMyClick" /> <ListView android:id="@+id/list_view" android:layout_width="match_parent" android:layout_height="match_parent" > </ListView> </LinearLayout>
java程式碼:
package com.example.administrator.myapplication; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private List<TM> list=new ArrayList<TM>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == 1) { int year = data.getIntExtra("year", 0); int month = data.getIntExtra("month", 0); int day = data.getIntExtra("day", 0); int hour = data.getIntExtra("hour", 0); int minute = data.getIntExtra("minute", 0); byte[] bitmapBytes = data.getByteArrayExtra("bitmap"); Bitmap bmp = null; if (bitmapBytes != null) { bmp = BitmapFactory.decodeByteArray(bitmapBytes, 0, bitmapBytes.length); } String memoText = data.getStringExtra("memoText"); String text = makeTimeString(year, month, day, hour, minute, memoText); TM tm=new TM(); tm.bmp=bmp; tm.text=text; list.add(tm); BaseAdapter baseAdapter=new MyBaseAdapter(list,getApplicationContext()); ListView listView = (ListView) findViewById(R.id.list_view); // listView.setAdapter(adapter); listView.setAdapter(baseAdapter); } } public String makeTimeString(int year, int month, int day, int hour, int minute, String memoText) { return "日期:" + year + "年" + (month + 1) + "月" + day + "日 時間:" + hour + "時" + minute + "分 ---" + memoText; } public void onMyClick(View view) { Intent intent = new Intent(MainActivity.this, Main2Activity.class); startActivityForResult(intent, 1); } } class MyBaseAdapter extends BaseAdapter { private List<TM> list; private Context mcontext; public MyBaseAdapter(List list, Context mcontext) { super(); this.list = list; this.mcontext = mcontext; } public int getCount() { return list.size(); } public Object getItem(int position) { return null; } public long getItemId(int position) { return 0; } public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = LayoutInflater.from(mcontext); View v1 = inflater.inflate(R.layout.item, null); TextView textView = (TextView) v1.findViewById(R.id.textView); ImageView imageView = (ImageView) v1.findViewById(R.id.im); textView.setText(list.get(position).text); imageView.setImageBitmap(list.get(position).bmp); return v1; } }
活動2:
Xml:
<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/scrollView1" android:layout_width="match_parent" android:layout_height="wrap_content" > <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="請選擇日期和時間" /> <!-- 定義一個DatePicker元件 --> <DatePicker android:id="@+id/datePicker" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:calendarViewShown="true" android:endYear="2050" android:spinnersShown="true" android:startYear="2000" /> <TimePicker android:theme="@android:style/Theme.Holo.Light.NoActionBar" android:id="@+id/timePicker" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" /> <!-- 定義一個TimePicker元件 --> <Button android:id="@+id/bt2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="新增圖片" android:onClick="MyClick2" android:layout_gravity="left" /> <EditText android:id="@+id/edt1" android:layout_width="match_parent" android:layout_height="100dp" android:maxLines="3" android:hint="在這裡寫備忘記錄" /> <Button android:id="@+id/bt1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="完成" android:onClick="MyClick" android:layout_gravity="center" /> </LinearLayout> </ScrollView>
JAVA:
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.icu.util.Calendar;
import android.support.v4.content.SharedPreferencesCompat;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TimePicker;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
public class Main2Activity extends AppCompatActivity {
private int year;
private int month;
private int day;
private int hour;
private int minute;
private Bitmap bmp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
DatePicker datePicker = (DatePicker) findViewById(R.id.datePicker);
TimePicker timePicker = (TimePicker) findViewById(R.id.timePicker);
timePicker.setIs24HourView(true);
Calendar c = Calendar.getInstance();
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH);
day = c.get(Calendar.DAY_OF_MONTH);
hour = c.get(Calendar.HOUR);
minute = c.get(Calendar.MINUTE);
// 初始化DatePicker,初始化時指定監聽器
datePicker.init(year, month, day, new DatePicker.OnDateChangedListener()
{
@Override
public void onDateChanged(DatePicker arg0, int year,int month, int day)
{
//在這裡儲存使用者選擇的日期:
Main2Activity.this.year=year;
Main2Activity.this.month=month;
Main2Activity.this.day=day;
}
});
// 為TimePicker指定監聽器
timePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener()
{
@Override
public void onTimeChanged(TimePicker view, int hourOfDay, int minute)
{
Main2Activity.this.hour=hourOfDay;
Main2Activity.this.minute=minute;
}
});
}
public static Bitmap getBitmapFromView(View v) {
Bitmap b = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Bitmap.Config.RGB_565);
Canvas c = new Canvas(b);
v.layout(v.getLeft(), v.getTop(), v.getRight(), v.getBottom());
// Draw background
Drawable bgDrawable = v.getBackground();
if (bgDrawable != null)
bgDrawable.draw(c);
else
c.drawColor(Color.WHITE);
// Draw view to canvas
v.draw(c);
return b;
}
public void MyClick2(View view)
{
AlertDialog.Builder b = new AlertDialog.Builder(Main2Activity.this);
//設定對話方塊標題:
b.setTitle("test");
//創建出我們的自定義控制元件:
final View myview = new MyView(Main2Activity.this);
//新增到對話方塊中
b.setView(myview);
//設定對話方塊的確定按鈕
b.setPositiveButton("確定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
bmp=Main2Activity.getBitmapFromView(myview);
ImageView img=(ImageView)findViewById(R.id.img);
img.setImageBitmap(bmp);
}
});
//顯示對話方塊
b.show();
}
public void MyClick(View view)
{
EditText text=(EditText)findViewById(R.id.edt1);
String memoText=text.getText().toString();
Intent data = new Intent();
// 之前需要定義5個記錄當前時間的變數
data.putExtra("year",year);
data.putExtra("month",month);
data.putExtra("day",day);
data.putExtra("hour",hour);
data.putExtra("minute",minute);
data.putExtra("memoText",memoText);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, baos);
data.putExtra("bitmap", baos.toByteArray());
setResult(1,data);
//關閉當前Activity:
finish();
}
}
自定義控制元件MyView java程式碼:
package com.example.administrator.myapplication;
/**
* Created by Administrator on 2017/11/26.
*/
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.view.MotionEvent;
import android.view.View;
public class MyView extends View {
float firstX;
float firstY;
Path path;
MyView(Context context)
{
super(context);
path = new Path();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint();
paint.setColor(Color.BLUE);
paint.setStrokeWidth(10);
//讓畫出的圖形是空心的
paint.setStyle(Paint.Style.STROKE);
canvas.drawPath(path,paint);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int act = event.getAction();
if (act == MotionEvent.ACTION_DOWN)
{
float x = event.getX();
float y = event.getY();
firstX = x;
firstY = y;
path.moveTo(firstX,firstY);
return true;
}
else if (act == MotionEvent.ACTION_MOVE)
{
float x = event.getX();
float y = event.getY();
path.lineTo(x,y);
invalidate();
}
return super.onTouchEvent(event);
}
}
實體類TM(item.xml元件抽象屬性):
package com.example.administrator.myapplication;
import android.graphics.Bitmap;
/**
* Created by Administrator on 2017/11/30.
*/
public class TM {
public String text;
public Bitmap bmp;
}
item.xml(Baseadapter佈局設定):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ImageView
android:id="@+id/im"
android:layout_width="60dp"
android:layout_height="60dp"
android:scaleType="centerInside"
/>
</LinearLayout>