Android實現圖片放大縮小

Android實現圖片放大縮小???

package com.min.Test_Gallery;??
?
import Android.app.Activity;??
import android.graphics.Bitmap;??
import android.graphics.BitmapFactory;??
import android.graphics.Color;??
import android.graphics.Matrix;??
import android.os.Bundle;??
import android.util.DisplayMetrics;??
import android.util.Log;??
import android.view.GestureDetector;??
import android.view.KeyEvent;??
import android.view.MotionEvent;??
import android.view.View;??
import android.view.GestureDetector.OnGestureListener;??
import android.view.View.OnTouchListener;??
import android.widget.Button;??
import android.widget.FrameLayout;??
import android.widget.ImageView;??
import android.widget.LinearLayout;??
import android.widget.Toast;??
?
public class DisplayImage extends Activity implements OnTouchListener, OnGestureListener? {??
??? private static final String TAG = "DisplayImage";??
??? private static final int FLING_MIN_DISTANCE = 100;??
??? private static final int FLING_MIN_VELOCITY = 200;??
??????
??????
??? /* 相關變量聲明 */?
??? private ImageView mImageView;??
??? private Button mButton01;??
??? private Button mButton02;??
??? private FrameLayout layout1;??
??? private LinearLayout layoutImage;??
??? private Bitmap bmp;??
??? private int id=0;??
??? private int displayWidth;??
??? private int displayHeight;??
??? private float scaleWidth=1;??
??? private float scaleHeight=1;??
??? private GestureDetector mGestureDetector;??
??????
??? /** Called when the activity is first created. */?
??? @Override?
??? public void onCreate(Bundle savedInstanceState)??? {??
??????? super.onCreate(savedInstanceState);??
??????? /* 加載display.xml Layout */?
??????? setContentView(R.layout.display);??
??????????
??????? /* 取得屏幕分辨率大小 */?
??????? DisplayMetrics dm=new DisplayMetrics();??
??????? getWindowManager().getDefaultDisplay().getMetrics(dm);??
??????? displayWidth=dm.widthPixels;??
??????? displayHeight=dm.heightPixels;???
??????????
??????? /* 初始化相關變量 */?
??????? Bundle bundle = this.getIntent().getExtras();??
??????? Integer imageId = bundle.getInt("imageId");??
??????? Log.i(TAG, "onCreate, imageId = " + imageId);??
???????????????????????
??????? bmp=BitmapFactory.decodeResource(getResources(), imageId);???
??????? mImageView = (ImageView)findViewById(R.id.myImageView);??
??????? mImageView.setImageBitmap(bmp);??
??????? mImageView.setOnTouchListener(this);??
??????? mImageView.setLongClickable(true);??
??????????
??????? layout1 = (FrameLayout)findViewById(R.id.layout1);??
??????? layoutImage = (LinearLayout)findViewById(R.id.layoutImage);??
??????? mButton01 = (Button)findViewById(R.id.myButton1);??
??????? mButton02 = (Button)findViewById(R.id.myButton2);???
??????????
??????? /* 縮小按鈕onClickListener */?
??????? mButton01.setOnClickListener(new Button.OnClickListener() {??
??????????? @Override?
??????????? public void onClick(View v) {??
??????????????? small();???
??????????? }??
??????? });??
??????????
??????? /* 放大按鈕onClickListener */?
??????? mButton02.setOnClickListener(new Button.OnClickListener() {??
??????????? @Override?????????
??????????? public void onClick(View v) {??
??????????????? big();??
??????????? }???
??????? });??
??? }????
??????
??? // 用戶輕觸觸摸屏,由1個MotionEvent ACTION_DOWN觸發??
??? @Override?
??? public boolean onDown(MotionEvent e) {??
??????? // TODO Auto-generated method stub??
//????? Toast.makeText(this, "onDown", Toast.LENGTH_SHORT).show();??????
??????? Log.i(TAG, "onDown...");??
??????????
??????? return false;??
??? }??
?
??? /* 用戶按下觸摸屏、快速移動后松開,由1個MotionEvent ACTION_DOWN,??
???? * 多個ACTION_MOVE, 1個ACTION_UP觸發?
???? * 參數解釋:??
???? * e1:第1個ACTION_DOWN MotionEvent??
???? * e2:最后一個ACTION_MOVE MotionEvent??
???? * velocityX:X軸上的移動速度,像素/秒??
???? * velocityY:Y軸上的移動速度,像素/秒??
???? * 觸發條件 :??
???? * X軸的坐標位移大于FLING_MIN_DISTANCE,且移動速度大于FLING_MIN_VELOCITY個像素/秒?
???? * @see android.view.GestureDetector$OnGestureListener#onFling(android.view.MotionEvent, android.view.MotionEvent, float, float)?
???? */?
??? @Override?
??? public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,??
??????????? float velocityY) {??
??????? // TODO Auto-generated method stub??
??????? Log.i(TAG, "onFling...");??
??????????
??????? if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE??????
???????????????? && Math.abs(velocityX) > FLING_MIN_VELOCITY) {??????
??????????? // Fling left???
?
???????????? Toast.makeText(this, "Fling Left", Toast.LENGTH_SHORT).show();??????
???????? } else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE??????
???????????????? && Math.abs(velocityX) > FLING_MIN_VELOCITY) {??????
?
???????????? // Fling right???
?
???????????? Toast.makeText(this, "Fling Right", Toast.LENGTH_SHORT).show();??????
???????? }????
??????????
??????? return false;??
??? }??
?
??? // 用戶長按觸摸屏,由多個MotionEvent ACTION_DOWN觸發???
??? @Override?
??? public void onLongPress(MotionEvent e) {??
??????? // TODO Auto-generated method stub??
??????? Log.i(TAG, "onLongPress...");??
??????????
??? }??
?
??? // 用戶按下觸摸屏,并拖動,由1個MotionEvent ACTION_DOWN, 多個ACTION_MOVE觸發??
??? @Override?
??? public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,??
??????????? float distanceY) {??
??????? // TODO Auto-generated method stub??
??????? Log.i(TAG, "onScroll...");??
??????????
??????? return false;??
??? }??
?
??? // 用戶輕觸觸摸屏,尚未松開或拖動,由一個1個MotionEvent ACTION_DOWN觸發??
??? // 注意和onDown()的區別,強調的是沒有松開或者拖動的狀態??
??? @Override?
??? public void onShowPress(MotionEvent e) {??
??????? // TODO Auto-generated method stub??
??????? Log.i(TAG, "onShowPress...");??
??????????
??? }??
?
??? // 用戶(輕觸觸摸屏后)松開,由一個1個MotionEvent ACTION_UP觸發??
??? @Override?
??? public boolean onSingleTapUp(MotionEvent e) {??
??????? // TODO Auto-generated method stub??
??????? Log.i(TAG, "onSingleTapUp...");??
??????????
??????? return false;??
??? }??
?
??? @Override?
??? public boolean onTouch(View v, MotionEvent event) {??
??????? // TODO Auto-generated method stub??
??????? Log.i(TAG, "onTouch...");??
??????????
??????? // Set button visible??
??????? mButton01.setVisibility(View.VISIBLE);??
??????? mButton02.setVisibility(View.VISIBLE);??
??????????
??????? return? mGestureDetector.onTouchEvent(event);??????
??? }??
?
//? @Override??
//? public boolean onTouchEvent(MotionEvent event) {??
//????? // TODO Auto-generated method stub??
//????? super.onTouchEvent(event);??
//????????
//????? Log.i(TAG, "onTouchEvent");??
//????? // Set button visible??
//????? mButton01.setVisibility(View.VISIBLE);??
//????? mButton02.setVisibility(View.VISIBLE);??
//????????
//????? return true;??
//? }??
??????
??? @Override?
??? public boolean onKeyDown(int keyCode, KeyEvent event) {??
??????? // TODO Auto-generated method stub??
??????? super.onKeyDown(keyCode, event);??
??????????
??????? Log.i(TAG, "onKeyDown...");??
??????? // Set button visible??
??????? mButton01.setVisibility(View.VISIBLE);??
??????? mButton02.setVisibility(View.VISIBLE);??
??????????
??????? return true;??
??? }??
?
??? /* 圖片縮小的method */?
??? private void small()??? {??
??????? int bmpWidth=bmp.getWidth();???
??????? int bmpHeight=bmp.getHeight();??
??????????
??????? Log.i(TAG, "bmpWidth = " + bmpWidth + ", bmpHeight = " + bmpHeight);??
??????????
??????? /* 設置圖片縮小的比例 */?
??????? double scale=0.8;??
??????? /* 計算出這次要縮小的比例 */???
??????? scaleWidth=(float) (scaleWidth*scale);???
??????? scaleHeight=(float) (scaleHeight*scale);???
??????? /* 產生reSize后的Bitmap對象 */?
??????? Matrix matrix = new Matrix();??
??????? matrix.postScale(scaleWidth, scaleHeight);??
??????? Bitmap resizeBmp = Bitmap.createBitmap(bmp,0,0,bmpWidth,???
??????????????? bmpHeight,matrix,true);???
??????????
??????? if(id==0)????? {??
??????????? /* 如果是第一次按,就刪除原來默認的ImageView */?
??????????? layoutImage.removeView(mImageView);??
??????? } else {??
??????????? /* 如果不是第一次按,就刪除上次放大縮小所產生的ImageView */?
??????????? layoutImage.removeView((ImageView)findViewById(id));??
??????? }???
??????????
??????? /* 產生新的ImageView,放入reSize的Bitmap對象,再放入Layout中 */?
??????? id++;??
??????? ImageView imageView = new ImageView(this);??
??????? imageView.setId(id);??
??????? imageView.setImageBitmap(resizeBmp);??
??????? layoutImage.addView(imageView);??
??????? Log.i(TAG, "imageView.getWidth() = " + imageView.getWidth()??
??????????????? + ", imageView.getHeight() = " + imageView.getHeight());??
??????? setContentView(layout1);??
??????? /* 因為圖片放到最大時放大按鈕會disable,所以在縮小時把它重設為enable */???
??????? mButton02.setEnabled(true);??
??????? mButton02.setTextColor(Color.MAGENTA);??
??? }??
??????
??? /* 圖片放大的method */?
??? private void big() {??
??????? int bmpWidth=bmp.getWidth();??
??????? int bmpHeight=bmp.getHeight();??
??????????
??????? Log.i(TAG, "bmpWidth = " + bmpWidth + ", bmpHeight = " + bmpHeight);??
??????????
??????? /* 設置圖片放大的比例 */?
??????? double scale=1.25;??
??????? /* 計算這次要放大的比例 */?
??????? scaleWidth=(float)(scaleWidth*scale);??
??????? scaleHeight=(float)(scaleHeight*scale);??
??????? /* 產生reSize后的Bitmap對象 */?
??????? Matrix matrix = new Matrix();??
??????? matrix.postScale(scaleWidth, scaleHeight);??
??????? Bitmap resizeBmp = Bitmap.createBitmap(bmp,0,0,bmpWidth,???
??????????????? bmpHeight,matrix,true);??
??????????
??????? if(id==0) {??
??????????? /* 如果是第一次按,就刪除原來設置的ImageView */?
??????????? layoutImage.removeView(mImageView);??
??????? } else {??
??????????? /* 如果不是第一次按,就刪除上次放大縮小所產生的ImageView */???
??????????? layoutImage.removeView((ImageView)findViewById(id));??
??????? }??
??????????
??????? /* 產生新的ImageView,放入reSize的Bitmap對象,再放入Layout中 */?
??????? id++;??
??????? ImageView imageView = new ImageView(this);??
??????? imageView.setId(id);??
??????? imageView.setImageBitmap(resizeBmp);??
??????? layoutImage.addView(imageView);??
??????? setContentView(layout1);??
??????? /* 如果再放大會超過屏幕大小,就把Button disable */?
??????? if( scaleWidth * scale * bmpWidth > bmpWidth * 3 ||??
??????????? scaleHeight * scale * bmpHeight > bmpWidth * 3 ||??
??????????? scaleWidth * scale * bmpWidth > displayWidth * 5 ||??
??????????? scaleHeight * scale * bmpHeight > displayHeight * 5) {??
??????????????? mButton02.setEnabled(false);??
??????????????? mButton02.setTextColor(Color.GRAY);??
??????????? } else {??
??????????????? mButton02.setEnabled(true);??
??????????????? mButton02.setTextColor(Color.MAGENTA);??
??????????? }??
??????? }???
??????
}?
package com.min.Test_Gallery;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.Matrix;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.GestureDetector;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.GestureDetector.OnGestureListener;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast;

public class DisplayImage extends Activity implements OnTouchListener, OnGestureListener? {
?private static final String TAG = "DisplayImage";
?private static final int FLING_MIN_DISTANCE = 100;
?private static final int FLING_MIN_VELOCITY = 200;
?
?
?/* 相關變量聲明 */
?private ImageView mImageView;
?private Button mButton01;
?private Button mButton02;
?private FrameLayout layout1;
?private LinearLayout layoutImage;
?private Bitmap bmp;
?private int id=0;
?private int displayWidth;
?private int displayHeight;
?private float scaleWidth=1;
?private float scaleHeight=1;
?private GestureDetector mGestureDetector;
?
?/** Called when the activity is first created. */
?@Override
?public void onCreate(Bundle savedInstanceState)??? {
??super.onCreate(savedInstanceState);
??/* 加載display.xml Layout */
??setContentView(R.layout.display);
??
??/* 取得屏幕分辨率大小 */
??DisplayMetrics dm=new DisplayMetrics();
??getWindowManager().getDefaultDisplay().getMetrics(dm);
??displayWidth=dm.widthPixels;
??displayHeight=dm.heightPixels;
??
??/* 初始化相關變量 */
??Bundle bundle = this.getIntent().getExtras();
??Integer imageId = bundle.getInt("imageId");
??Log.i(TAG, "onCreate, imageId = " + imageId);
????????????? ?????
??bmp=BitmapFactory.decodeResource(getResources(), imageId);
??mImageView = (ImageView)findViewById(R.id.myImageView);
??mImageView.setImageBitmap(bmp);
??mImageView.setOnTouchListener(this);
??mImageView.setLongClickable(true);
??
??layout1 = (FrameLayout)findViewById(R.id.layout1);
??layoutImage = (LinearLayout)findViewById(R.id.layoutImage);
??mButton01 = (Button)findViewById(R.id.myButton1);
??mButton02 = (Button)findViewById(R.id.myButton2);
??
??/* 縮小按鈕onClickListener */
??mButton01.setOnClickListener(new Button.OnClickListener() {
???@Override
???public void onClick(View v) {
????small();
???}
??});
??
??/* 放大按鈕onClickListener */
??mButton02.setOnClickListener(new Button.OnClickListener() {
???@Override??????
???public void onClick(View v) {
????big();
???}
??});
?}?
?
?// 用戶輕觸觸摸屏,由1個MotionEvent ACTION_DOWN觸發
?@Override
?public boolean onDown(MotionEvent e) {
??// TODO Auto-generated method stub
//??Toast.makeText(this, "onDown", Toast.LENGTH_SHORT).show();???
??Log.i(TAG, "onDown...");
??
??return false;
?}

?/* 用戶按下觸摸屏、快速移動后松開,由1個MotionEvent ACTION_DOWN,
? * 多個ACTION_MOVE, 1個ACTION_UP觸發
? * 參數解釋:
? * e1:第1個ACTION_DOWN MotionEvent
? * e2:最后一個ACTION_MOVE MotionEvent
? * velocityX:X軸上的移動速度,像素/秒
? * velocityY:Y軸上的移動速度,像素/秒
? * 觸發條件 :
? * X軸的坐標位移大于FLING_MIN_DISTANCE,且移動速度大于FLING_MIN_VELOCITY個像素/秒
? * @see android.view.GestureDetector$OnGestureListener#onFling(android.view.MotionEvent, android.view.MotionEvent, float, float)
? */
?@Override
?public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
???float velocityY) {
??// TODO Auto-generated method stub
??Log.i(TAG, "onFling...");
??
??if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE???
????????????? && Math.abs(velocityX) > FLING_MIN_VELOCITY) {???
???// Fling left

????????? Toast.makeText(this, "Fling Left", Toast.LENGTH_SHORT).show();???
????? } else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE???
????????????? && Math.abs(velocityX) > FLING_MIN_VELOCITY) {???

???? ? // Fling right

????????? Toast.makeText(this, "Fling Right", Toast.LENGTH_SHORT).show();???
????? }?
??
??return false;
?}

?// 用戶長按觸摸屏,由多個MotionEvent ACTION_DOWN觸發
?@Override
?public void onLongPress(MotionEvent e) {
??// TODO Auto-generated method stub
??Log.i(TAG, "onLongPress...");
??
?}

?// 用戶按下觸摸屏,并拖動,由1個MotionEvent ACTION_DOWN, 多個ACTION_MOVE觸發
?@Override
?public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
???float distanceY) {
??// TODO Auto-generated method stub
??Log.i(TAG, "onScroll...");
??
??return false;
?}

?// 用戶輕觸觸摸屏,尚未松開或拖動,由一個1個MotionEvent ACTION_DOWN觸發
?// 注意和onDown()的區別,強調的是沒有松開或者拖動的狀態
?@Override
?public void onShowPress(MotionEvent e) {
??// TODO Auto-generated method stub
??Log.i(TAG, "onShowPress...");
??
?}

?// 用戶(輕觸觸摸屏后)松開,由一個1個MotionEvent ACTION_UP觸發
?@Override
?public boolean onSingleTapUp(MotionEvent e) {
??// TODO Auto-generated method stub
??Log.i(TAG, "onSingleTapUp...");
??
??return false;
?}

?@Override
?public boolean onTouch(View v, MotionEvent event) {
??// TODO Auto-generated method stub
??Log.i(TAG, "onTouch...");
??
??// Set button visible
??mButton01.setVisibility(View.VISIBLE);
??mButton02.setVisibility(View.VISIBLE);
??
??return? mGestureDetector.onTouchEvent(event);???
?}

//?@Override
//?public boolean onTouchEvent(MotionEvent event) {
//??// TODO Auto-generated method stub
//??super.onTouchEvent(event);
//??
//??Log.i(TAG, "onTouchEvent");
//??// Set button visible
//??mButton01.setVisibility(View.VISIBLE);
//??mButton02.setVisibility(View.VISIBLE);
//??
//??return true;
//?}
?
?@Override
?public boolean onKeyDown(int keyCode, KeyEvent event) {
??// TODO Auto-generated method stub
??super.onKeyDown(keyCode, event);
??
??Log.i(TAG, "onKeyDown...");
??// Set button visible
??mButton01.setVisibility(View.VISIBLE);
??mButton02.setVisibility(View.VISIBLE);
??
??return true;
?}

?/* 圖片縮小的method */
?private void small()??? {
??int bmpWidth=bmp.getWidth();
??int bmpHeight=bmp.getHeight();
??
??Log.i(TAG, "bmpWidth = " + bmpWidth + ", bmpHeight = " + bmpHeight);
??
??/* 設置圖片縮小的比例 */
??double scale=0.8;
??/* 計算出這次要縮小的比例 */
??scaleWidth=(float) (scaleWidth*scale);
??scaleHeight=(float) (scaleHeight*scale);
??/* 產生reSize后的Bitmap對象 */
??Matrix matrix = new Matrix();
??matrix.postScale(scaleWidth, scaleHeight);
??Bitmap resizeBmp = Bitmap.createBitmap(bmp,0,0,bmpWidth,
????bmpHeight,matrix,true);
??
??if(id==0)????? {
???/* 如果是第一次按,就刪除原來默認的ImageView */
???layoutImage.removeView(mImageView);
??} else {
???/* 如果不是第一次按,就刪除上次放大縮小所產生的ImageView */
???layoutImage.removeView((ImageView)findViewById(id));
??}
??
??/* 產生新的ImageView,放入reSize的Bitmap對象,再放入Layout中 */
??id++;
??ImageView imageView = new ImageView(this);
??imageView.setId(id);
??imageView.setImageBitmap(resizeBmp);
??layoutImage.addView(imageView);
??Log.i(TAG, "imageView.getWidth() = " + imageView.getWidth()
????+ ", imageView.getHeight() = " + imageView.getHeight());
??setContentView(layout1);
??/* 因為圖片放到最大時放大按鈕會disable,所以在縮小時把它重設為enable */
??mButton02.setEnabled(true);
??mButton02.setTextColor(Color.MAGENTA);
?}
?
?/* 圖片放大的method */
?private void big() {
??int bmpWidth=bmp.getWidth();
??int bmpHeight=bmp.getHeight();
??
??Log.i(TAG, "bmpWidth = " + bmpWidth + ", bmpHeight = " + bmpHeight);
??
??/* 設置圖片放大的比例 */
??double scale=1.25;
??/* 計算這次要放大的比例 */
??scaleWidth=(float)(scaleWidth*scale);
??scaleHeight=(float)(scaleHeight*scale);
??/* 產生reSize后的Bitmap對象 */
??Matrix matrix = new Matrix();
??matrix.postScale(scaleWidth, scaleHeight);
??Bitmap resizeBmp = Bitmap.createBitmap(bmp,0,0,bmpWidth,
????bmpHeight,matrix,true);
??
??if(id==0) {
???/* 如果是第一次按,就刪除原來設置的ImageView */
???layoutImage.removeView(mImageView);
??} else {
???/* 如果不是第一次按,就刪除上次放大縮小所產生的ImageView */
???layoutImage.removeView((ImageView)findViewById(id));
??}
??
??/* 產生新的ImageView,放入reSize的Bitmap對象,再放入Layout中 */
??id++;
??ImageView imageView = new ImageView(this);
??imageView.setId(id);
??imageView.setImageBitmap(resizeBmp);
??layoutImage.addView(imageView);
??setContentView(layout1);
??/* 如果再放大會超過屏幕大小,就把Button disable */
??if( scaleWidth * scale * bmpWidth > bmpWidth * 3 ||
???scaleHeight * scale * bmpHeight > bmpWidth * 3 ||
???scaleWidth * scale * bmpWidth > displayWidth * 5 ||
???scaleHeight * scale * bmpHeight > displayHeight * 5) {
????mButton02.setEnabled(false);
????mButton02.setTextColor(Color.GRAY);
???} else {
????mButton02.setEnabled(true);
????mButton02.setTextColor(Color.MAGENTA);
???}
??}
?
}

display.xml文件

view plaincopy to clipboardprint?
<?xml version="1.0" encoding="utf-8"?>?
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"?
??? android:orientation="vertical"?
??? android:layout_width="fill_parent"?
??? android:layout_height="fill_parent"?
??? android:id="@+id/layout1"?
??? >?
?
??? <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"?????
??????? android:layout_width="fill_parent"?
??????? android:layout_height="wrap_content"???
??????? android:layout_weight="19"?
??????? android:scrollbars="vertical"?
??????? android:fadingEdge="vertical">?
??? <HorizontalScrollView???
??????? android:layout_height="fill_parent"?
??????? android:layout_width="wrap_content">?
??????? <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"?
??????????? android:orientation="horizontal"?
??????????? android:layout_width="fill_parent"?
??????????? android:layout_height="wrap_content"?
??????????? android:gravity="center"?
??????????? android:id="@+id/layoutImage"?
??????????? >?
??????????? <ImageView?
??????????????? android:id="@+id/myImageView"?
??????????????? android:layout_width="fill_parent"?
??????????????? android:layout_height="wrap_content"?
??????????????? android:layout_weight="19"?
??????????????? android:paddingTop="5dip"?
??????????????? android:paddingBottom="5dip"?
??????????????? />?
??????? </LinearLayout>?
??? </HorizontalScrollView >?
??? </ScrollView>???
?
??? <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"?
??????? android:layout_width="fill_parent"?
??????? android:layout_height="wrap_content"?
??????? >?
??????? <Button?
??????????? android:id="@+id/myButton1"?
??????????? android:layout_width="45dip"?
??????????? android:layout_height="30dip"?
??????????? android:layout_alignParentLeft="true"?
??????????? android:gravity="left"?
??????????? style="@style/my_style_button"?
??????????? android:visibility="gone"?
??????????? android:text="縮小"?
??????????? />?
??????? <Button?
??????????? android:id="@+id/myButton2"?
??????????? android:layout_width="45dip"?
??????????? android:layout_height="30dip"?
??????????? android:layout_alignParentRight="true"?
??????????? android:gravity="right"?
??????????? style="@style/my_style_button"?
??????????? android:visibility="gone"?
??????????? android:text="放大"?
??????????? />?
??? </RelativeLayout>?
</FrameLayout>?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/388790.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/388790.shtml
英文地址,請注明出處:http://en.pswp.cn/news/388790.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

matlab散點圖折線圖_什么是散點圖以及何時使用

matlab散點圖折線圖When you were learning algebra back in high school, you might not have realized that one day you would need to create a scatter plot to demonstrate real-world results.當您在高中學習代數時&#xff0c;您可能沒有意識到有一天需要創建一個散點圖…

java判斷題_【Java判斷題】請大神們進來看下、這些判斷題你都知道多少~

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓、判斷改錯題(每題2分&#xff0c;共20分)(正確的打√&#xff0c;錯誤的打并說明原因)1、 Java系統包提供了很多預定義類,我們可以直接引用它們而不必從頭開始編寫程序。 ( )2、 程序可以用字符‘*’替代一個TextField中的每個字…

PoPo數據可視化第8期

PoPo數據可視化 聚焦于Web數據可視化與可視化交互領域&#xff0c;發現可視化領域有意思的內容。不想錯過可視化領域的精彩內容, 就快快關注我們吧 :) 微信訂閱號&#xff1a;popodv_com谷歌決定關閉云可視化服務 Fusion Tables谷歌宣布即將關閉其 Fusion Tables 云服務&#x…

AC自動機題單

AC自動機題目 真的超級感謝xzy 真的幫到我很多 題單 [X] [luogu3808]【模板】AC自動機&#xff08;簡單版&#xff09; https://www.luogu.org/problemnew/show/P3808[X] [luogu3796]【模板】AC自動機&#xff08;加強版&#xff09;https://www.luogu.org/problemnew/show/P37…

java list用法_Java List 用法詳解及實例分析

Java List 用法詳解及實例分析Java中可變數組的原理就是不斷的創建新的數組&#xff0c;將原數組加到新的數組中,下文對Java List用法做了詳解。List:元素是有序的(怎么存的就怎么取出來&#xff0c;順序不會亂)&#xff0c;元素可以重復(角標1上有個3&#xff0c;角標2上也可以…

python字符串和List:索引值以 0 為開始值,-1 為從末尾的開始位置;值和位置的區別哦...

String&#xff08;字符串&#xff09;Python中的字符串用單引號 或雙引號 " 括起來&#xff0c;同時使用反斜杠 \ 轉義特殊字符。 字符串的截取的語法格式如下&#xff1a; 變量[頭下標:尾下標]索引值以 0 為開始值&#xff0c;-1 為從末尾的開始位置。[一個是值&#x…

邏輯回歸 python_深入研究Python的邏輯回歸

邏輯回歸 pythonClassification techniques are an essential part of machine learning and data science applications. Approximately 70% of problems in machine learning are classification problems. There are lots of classification problems that are available, b…

spring定時任務(@Scheduled注解)

&#xff08;一&#xff09;在xml里加入task的命名空間 xmlns:task"http://www.springframework.org/schema/task" http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.1.xsd&#xff08;二&#xff09;啟用注…

net user 用戶名 密碼 /add 建立用戶

net user 用戶名 密碼 /add 建立用戶 other: net use \\ip\ipc$ " " /user:" " 建立IPC空鏈接 net use \\ip\ipc$ "密碼" /user:"用戶名" 建立IPC非空鏈接 net use h: \\ip\c$ "密碼" /user:"用戶名" 直接登陸后映…

JavaScript是如何工作的:與WebAssembly比較及其使用場景

*摘要&#xff1a;** WebAssembly未來可期。 原文&#xff1a;JavaScript是如何工作的&#xff1a;與WebAssembly比較及其使用場景作者&#xff1a;前端小智Fundebug經授權轉載&#xff0c;版權歸原作者所有。 這是專門探索 JavaScript及其所構建的組件的系列文章的第6篇。 如果…

友元 java_C++ 友元關系詳解

在C中&#xff0c;在某些情況下&#xff0c;允許特定的非成員函數訪問一個類的私有成員&#xff0c;同時仍然阻止一般的訪問&#xff0c;這是很方便做到的。例如&#xff0c;被重載的操作符&#xff0c;如輸入或輸出操作符&#xff0c;經常需要訪問類的私有數據成員。這些操作符…

Matplotlib中的“ plt”和“ ax”到底是什么?

Indeed, as the most popular and fundamental data visualisation library, Matplotlib is kind of confusing in some perspectives. It is usually to see that someone asking about的確&#xff0c;作為最受歡迎的基礎數據可視化庫&#xff0c;Matplotlib在某些方面令人困…

【數據庫的備份與還原】 .

差異備份,日志備份還原 IF DB_ID(db) IS NOT NULL DROP DATABASE db GO CREATE DATABASE db GO CREATE TABLE db.dbo.T(ID INT PRIMARY KEY IDENTITY(1,1)); GO BACKUP DATABASE db TO DISKd:/1.bak WITH FORMAT GO INSERT INTO db.dbo.T DEFAULT VALUES GO BACKUP DATAB…

方法 數組

方法的特點: 定義方法可以將功能代碼進行封裝 封裝:兩方面含義: 1.將有特定邏輯的多條代碼組合成一個整體!! 2.方便維護&#xff0c;提高代碼的復用性(聯想變量的作用域問題) 方法只有被調用才會被執行!!(方法調用的流程) 方法的重載: 兩同一不同: 同類,同方法名 形參列表不同 …

java 控制jsp_JSP學習之Java Web中的安全控制實例詳解

普通用戶界面修改登錄的Servlet&#xff0c;修改后的代碼如下&#xff1a;LoginProcess.java代碼&#xff1a;package servlet;import javabean.User;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.RequestDispatcher;import javax.servlet.Ser…

PHP 基礎 自動類型轉換之比較運算符

<?php var_dump( 123fg456>122); var_dump(some string 0); var_dump(123.0 123d456); var_dump(0 "a"); var_dump("1" "01"); var_dump("1" "1e0"); 當數字與字符串進行比較運算時&#xff0c;字符串會自動轉…

java的多線程訪問共享變量_java多線程通信之共享變量

(1)當訪問共同的代碼的時候&#xff1a;可以使用同一個Runnable對象&#xff0c;這個Runnable對象中有這個共享數據&#xff0c;比如賣票系統就可以這么做。或者這個共享數據封裝在一個對象當中&#xff0c;然后對這個對象加鎖&#xff0c;也可以實現數據安全訪問。public clas…

2018年阿里云NoSQL數據庫大事盤點

2019獨角獸企業重金招聘Python工程師標準>>> NoSQL一詞最早出現在1998年。2009年Last.fm的Johan Oskarsson發起了一次關于分布式開源數據庫的討論&#xff0c;來自Rackspace的Eric Evans再次提出了NoSQL概念&#xff0c;這時的NoSQL主要是指非關系型、分布式、不提供…

cayenne:用于隨機模擬的Python包

TL;DR; We just released v1.0 of cayenne, our Python package for stochastic simulations! Read on to find out if you should model your system as a stochastic process, and why you should try out cayenne.TL; DR; 我們剛剛發布了 cayenne v1.0 &#xff0c;這是我們…

java 如何將word 轉換為ftl_使用 freemarker導出word文檔

近日需要將人員的基本信息導出&#xff0c;存儲為word文檔&#xff0c;查閱了很多資料&#xff0c;最后選擇了使用freemarker&#xff0c;網上一共有四種方式&#xff0c;效果都一樣&#xff0c;選擇它呢是因為使用簡單&#xff0c;再次記錄一下,一個簡單的demo&#xff0c;僅供…