모조 미인단 상품 선택 구매 드롭다운 메뉴 실현

실제 응용으로 이루어진 블로그를 거의 쓰지 않는 것 같다.요즘은 실습을 하고 있어서 블로그를 쓰는 시간이 적어졌지만 그래도 꾸준히 해야 한다.오늘 이 블로그는 전자상거래 응용에서 흔히 볼 수 있는 선택 유형 아래 목록의 실현을 이야기한다.먼저 효과도를 살펴보십시오.
1. 드롭다운 목록의 실현
사실 실현 방법은 매우 많은데 이때 실현된 것도 기술적 함량이 없다. 단지 자신이 프로젝트에서 한 방법을 정리하고 아이디어를 제공할 뿐이다.
먼저 목록의 데이터입니다. 일반적으로 데이터는 백그라운드에서 읽습니다. 여기는 백그라운드가 없기 때문에 클라이언트에서 죽습니다.
private void initMenuData() {
		menuData1 = new ArrayList<Map<String, String>>();
		String[] menuStr1 = new String[] { "  ", "  ", "  ", "  ", "    ",
				 "    ", "  " };
		Map<String, String> map1;
		for (int i = 0, len = menuStr1.length; i < len; ++i) {
			map1 = new HashMap<String, String>();
			map1.put("name", menuStr1[i]);
			menuData1.add(map1);
		}

		menuData2 = new ArrayList<Map<String, String>>();
		String[] menuStr2 = new String[] { "    ", "     " };
		Map<String, String> map2;
		for (int i = 0, len = menuStr2.length; i < len; ++i) {
			map2 = new HashMap<String, String>();
			map2.put("name", menuStr2[i]);
			menuData2.add(map2);
		}

		menuData3 = new ArrayList<Map<String, String>>();
		String[] menuStr3 = new String[] { "    ", "    ", "    ",
				"     " };
		Map<String, String> map3;
		for (int i = 0, len = menuStr3.length; i < len; ++i) {
			map3 = new HashMap<String, String>();
			map3.put("name", menuStr3[i]);
			menuData3.add(map3);
		}
	}
간단한 포장을 했습니다.팝업 목록의 실행을 고려하려면 팝윈도우를 사용하십시오.
popMenu = new PopupWindow(contentView,
				LinearLayout.LayoutParams.MATCH_PARENT,
				LinearLayout.LayoutParams.MATCH_PARENT);
		popMenu.setOutsideTouchable(true);
		popMenu.setBackgroundDrawable(new BitmapDrawable());
		popMenu.setFocusable(true);
		popMenu.setAnimationStyle(R.style.popwin_anim_style);
		popMenu.setOnDismissListener(new OnDismissListener() {
			public void onDismiss() {
				productTv.setTextColor(Color.parseColor("#5a5959"));
				sortTv.setTextColor(Color.parseColor("#5a5959"));
				activityTv.setTextColor(Color.parseColor("#5a5959"));
			}
		});

그런 다음 adapter에 데이터를 캡슐화합니다.
menuAdapter1 = new SimpleAdapter(this, menuData1,
				R.layout.item_listview_popwin, new String[] { "name" },
				new int[] { R.id.listview_popwind_tv });
		menuAdapter2 = new SimpleAdapter(this, menuData2,
				R.layout.item_listview_popwin, new String[] { "name" },
				new int[] { R.id.listview_popwind_tv });
		menuAdapter3 = new SimpleAdapter(this, menuData3,
				R.layout.item_listview_popwin, new String[] { "name" },
				new int[] { R.id.listview_popwind_tv });
헤더 팝업 목록을 클릭하고 헤더의 색을 변경합니다
public void onClick(View v) {
		// TODO Auto-generated method stub
		switch (v.getId()) {
		case R.id.supplier_list_product:
			productTv.setTextColor(Color.parseColor("#39ac69"));
			popListView.setAdapter(menuAdapter1);
			popMenu.showAsDropDown(product, 0, 2);
			menuIndex = 0;
			break;
		case R.id.supplier_list_sort:
			sortTv.setTextColor(Color.parseColor("#39ac69"));
			popListView.setAdapter(menuAdapter2);
			popMenu.showAsDropDown(product, 0, 2);
			menuIndex = 1;
			break;
		case R.id.supplier_list_activity:
			activityTv.setTextColor(Color.parseColor("#39ac69"));
			popListView.setAdapter(menuAdapter3);
			popMenu.showAsDropDown(product, 0, 2);
			menuIndex = 2;
			break;

		}
	}

Popwindow가 Product라는 선택 제목의 바로 아래에 위치하도록 하기 위해서입니다.위와 같은 방식을 실현한다.
마지막으로 코드를 완전하게 붙이는 것은 그래도 매우 간단하다.마지막으로 코드 다운로드 링크도 제공한다.
public class MainActivity extends Activity implements
OnClickListener {
	private ListView listView, popListView;
	private ProgressBar progressBar;
	private List<Map<String, String>> menuData1, menuData2, menuData3;
	private PopupWindow popMenu;
	private SimpleAdapter menuAdapter1, menuAdapter2, menuAdapter3;

	private LinearLayout product, sort, activity;
	private ImageView cartIv;
	private TextView productTv, sortTv, activityTv, titleTv;
	private int green, grey;

	private String currentProduct, currentSort, currentActivity;
	private int menuIndex = 0;

	private Intent intent;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_supplier_list);
		findView();
		initMenuData();
		initPopMenu();
		
	}
	private void initMenuData() {
		menuData1 = new ArrayList<Map<String, String>>();
		String[] menuStr1 = new String[] { "  ", "  ", "  ", "  ", "    ",
				 "    ", "  " };
		Map<String, String> map1;
		for (int i = 0, len = menuStr1.length; i < len; ++i) {
			map1 = new HashMap<String, String>();
			map1.put("name", menuStr1[i]);
			menuData1.add(map1);
		}

		menuData2 = new ArrayList<Map<String, String>>();
		String[] menuStr2 = new String[] { "    ", "     " };
		Map<String, String> map2;
		for (int i = 0, len = menuStr2.length; i < len; ++i) {
			map2 = new HashMap<String, String>();
			map2.put("name", menuStr2[i]);
			menuData2.add(map2);
		}

		menuData3 = new ArrayList<Map<String, String>>();
		String[] menuStr3 = new String[] { "    ", "    ", "    ",
				"     " };
		Map<String, String> map3;
		for (int i = 0, len = menuStr3.length; i < len; ++i) {
			map3 = new HashMap<String, String>();
			map3.put("name", menuStr3[i]);
			menuData3.add(map3);
		}
	}
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch (v.getId()) {
		case R.id.supplier_list_product:
			productTv.setTextColor(Color.parseColor("#39ac69"));
			popListView.setAdapter(menuAdapter1);
			popMenu.showAsDropDown(product, 0, 2);
			menuIndex = 0;
			break;
		case R.id.supplier_list_sort:
			sortTv.setTextColor(Color.parseColor("#39ac69"));
			popListView.setAdapter(menuAdapter2);
			popMenu.showAsDropDown(product, 0, 2);
			menuIndex = 1;
			break;
		case R.id.supplier_list_activity:
			activityTv.setTextColor(Color.parseColor("#39ac69"));
			popListView.setAdapter(menuAdapter3);
			popMenu.showAsDropDown(product, 0, 2);
			menuIndex = 2;
			break;

		}
	}
	protected void findView() {
		listView = (ListView) findViewById(R.id.supplier_list_lv);
		product = (LinearLayout) findViewById(R.id.supplier_list_product);
		sort = (LinearLayout) findViewById(R.id.supplier_list_sort);
		activity = (LinearLayout) findViewById(R.id.supplier_list_activity);
		productTv = (TextView) findViewById(R.id.supplier_list_product_tv);
		sortTv = (TextView) findViewById(R.id.supplier_list_sort_tv);
		activityTv = (TextView) findViewById(R.id.supplier_list_activity_tv);
		titleTv = (TextView) findViewById(R.id.supplier_list_title_tv);
		cartIv = (ImageView) findViewById(R.id.supplier_list_cart_iv);
		progressBar = (ProgressBar) findViewById(R.id.progress);

		product.setOnClickListener(this);
		sort.setOnClickListener(this);
		activity.setOnClickListener(this);
		cartIv.setOnClickListener(this);
	}
	private void initPopMenu() {
		initMenuData();
		View contentView = View.inflate(this, R.layout.popwin_supplier_list,
				null);
		popMenu = new PopupWindow(contentView,
				LinearLayout.LayoutParams.MATCH_PARENT,
				LinearLayout.LayoutParams.MATCH_PARENT);
		popMenu.setOutsideTouchable(true);
		popMenu.setBackgroundDrawable(new BitmapDrawable());
		popMenu.setFocusable(true);
		popMenu.setAnimationStyle(R.style.popwin_anim_style);
		popMenu.setOnDismissListener(new OnDismissListener() {
			public void onDismiss() {
				productTv.setTextColor(Color.parseColor("#5a5959"));
				sortTv.setTextColor(Color.parseColor("#5a5959"));
				activityTv.setTextColor(Color.parseColor("#5a5959"));
			}
		});

		popListView = (ListView) contentView
				.findViewById(R.id.popwin_supplier_list_lv);
		contentView.findViewById(R.id.popwin_supplier_list_bottom)
				.setOnClickListener(new OnClickListener() {
					public void onClick(View arg0) {
						popMenu.dismiss();
					}
				});
		menuAdapter1 = new SimpleAdapter(this, menuData1,
				R.layout.item_listview_popwin, new String[] { "name" },
				new int[] { R.id.listview_popwind_tv });
		menuAdapter2 = new SimpleAdapter(this, menuData2,
				R.layout.item_listview_popwin, new String[] { "name" },
				new int[] { R.id.listview_popwind_tv });
		menuAdapter3 = new SimpleAdapter(this, menuData3,
				R.layout.item_listview_popwin, new String[] { "name" },
				new int[] { R.id.listview_popwind_tv });

		popListView.setOnItemClickListener(new OnItemClickListener() {
			public void onItemClick(AdapterView<?> arg0, View arg1, int pos,
					long arg3) {
				popMenu.dismiss();
				if (menuIndex == 0) {
					currentProduct = menuData1.get(pos).get("name");
					titleTv.setText(currentProduct);
					productTv.setText(currentProduct);
					Toast.makeText(MainActivity.this, currentProduct, Toast.LENGTH_SHORT).show();
				} else if (menuIndex == 1) {
					currentSort = menuData2.get(pos).get("name");
					titleTv.setText(currentSort);
					sortTv.setText(currentSort);
					Toast.makeText(MainActivity.this, currentSort, Toast.LENGTH_SHORT).show();
				} else {
					currentActivity = menuData3.get(pos).get("name");
					titleTv.setText(currentActivity);
					activityTv.setText(currentActivity);
					Toast.makeText(MainActivity.this, currentActivity, Toast.LENGTH_SHORT).show();
				}
			}
		});
	}
}

2. 원형 ProgressBar의 디스플레이를 로드합니다.
바로 효과도에 있는 ProgressBar를 불러오는 것입니다. 원형 ProgressBar는 원생적인 Bar로 실현할 수 있지만 양식이 단일합니다. 이전에 제가 이런 효과를 했을 때 가장 먼저 프레임 애니메이션을 고려했지만 이런 방식으로 많은 그림이 연결되어야 합니다. 이렇게 하면 번거로움을 실현할 수 있고 두 번째 그림은 메모리를 많이 차지합니다.다음은 기본 ProgressBar를 변경하는 애니메이션으로 간단합니다.
   <ProgressBar
            android:id="@+id/progress"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:indeterminateDrawable="@drawable/shape_progress"
            android:indeterminateDuration="1000" />
indeterminate Drawable는 배경 그림을 불러오고 indeterminate Duration은 회전 속도입니다.이곳의 사고방식은 xml로 그림을 그리는 것이다. 이것은 고리형이고 고리형 코일에 점차적인 색깔이 있다.다음과 같습니다.
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toDegrees="360" >

    <shape
        android:innerRadiusRatio="3"
        android:shape="ring"
        android:thicknessRatio="10"
        android:useLevel="false" >
        <gradient
            android:centerColor="#8cd4aa"
            android:centerY="0.50"
            android:endColor="#ffffff"
            android:startColor="#39ac69"
            android:type="sweep"
            android:useLevel="false" />
    </shape>

</rotate>

rotate 설정 회전 애니메이션, 360도 회전.shape=ring 설정 배경은 원입니다.android: innerRadiusRatio="3"은 내환반경을 설정하고,android:thicknessRatio="10"은 외환반경을 설정합니다.마지막으로 링의 색을 점차적으로 변화시키기 위해gradient를 사용하여 설정합니다.gradient는 세 가지 점차적인 방식, 선형, 복사, 스캐닝을 할 수 있다.여기 type은 스캔으로 설정해야 합니다.그리고 중심점을 설정하여 색을 시작하고 끝내면 위의 그런 효과를 실현할 수 있다.
자, 여기까지만 하면 모든 효과가 끝납니다.원본 다운로드 주소를 붙이려면:
https://github.com/reallin/PopWin_MeiTuan

좋은 웹페이지 즐겨찾기