精华内容
下载资源
问答
  • 如果你想找到一种折中的方法,那么可以考虑亿图示。 亿图示拥有丰富的图形符号,并且支持符号自由拖拽以及快速连线,效果是这样的: 亿图示还拥有丰富的模板(包括固定模板以及模板社区作品)可供选择,...

    PPT制作流程图有两种方法:

    常规的方法就是,通过插入基础图形进行绘制。这种方法的优点就是自由,但是操作比较繁琐,比如箭线的绘制就不太智能;

    最快的方法就是,使用SmartArt,里面有一些流程样式可以选择。这种方法的优点就是快,但缺点是样式固定,很难做布局上的二次调整。

     

    如果你想找到一种折中的方法,那么可以考虑亿图图示。

    亿图图示拥有丰富的图形符号,并且支持符号自由拖拽以及快速连线,效果是这样的:

     

    亿图图示还拥有丰富的模板(包括固定模板以及模板社区作品)可供选择,支持用户高度自定义模板;

    自带模板

     

    模板社区

     

    来源:亿图图示模板社区

     

    来源:亿图图示模板社区

     

    来源:亿图图示模板社区

     

    来源:亿图图示模板社区

     

    值得一提的是,亿图图示还支持将文件导出为PPT,感兴趣的可以自己体验下▼

    一键体验 亿图图示 在线版
    edrawmax.cn

    最后,附上关于流程图的相关“弹药”,有需要的自己移步查看▼

    亿图图示:优秀的流程图都这样画(附三大绘制规范)​
    图标

    展开全文
  • 删除图片 怎么隐藏啊

    2020-11-30 07:30:11
    在布局文件设置 app:bga_snpl_deleteDrawable="" 没有用,setDeleteDrawableResId 也不能乱传id吧 在您的demo中 MomentAdapter 里面 并没有找到什么特别的方法</p><p>该提问来源于开源项目ÿ...
  • 最近研究iphone上的翻转效果,就是类似于passbook里面的查看票据的时候,...网上找到原来apidemos里面就提供了翻转动画,不过是针对图片的翻转,但是我想只要有动画就是一样的调用,管它图片还是布局呢,最后还...

    最近在研究iphone上的翻转效果,就是类似于passbook里面的查看票据的时候,正面是一种布局,点击某个按钮会翻转到背面,然后呈现的又是另一个布局。就在想怎么用到android里面呢?正好,最近项目有这个需求。于是便上网搜寻有关android的翻转动画的资料。在网上找到原来apidemos里面就提供了翻转动画,不过是针对图片的翻转,但是我想只要有动画就是一样的调用,管它图片还是布局呢,最后还不是xxx.startAnimation。翻转动画如下,如果没有apidemos的童鞋可以直接拿去用。

    package com.huiian.kelu.util;
    
    import android.graphics.Camera;
    import android.graphics.Matrix;
    import android.view.animation.Animation;
    import android.view.animation.Transformation;
    
    public class Rotate3dAnimation extends Animation {
    	private final float fromDegrees;
    	private final float toDegrees;
    	private final float centerX;
    	private final float centerY;
    	private final float depthZ;
    	private final boolean reverse;
    	private Camera camera;
    
    	public Rotate3dAnimation(float fromDegrees, float toDegrees, float centerX,
    			float centerY, float depthZ, boolean reverse) {
    		this.fromDegrees = fromDegrees;
    		this.toDegrees = toDegrees;
    		this.centerX = centerX;
    		this.centerY = centerY;
    		this.depthZ = depthZ;
    		this.reverse = reverse;
    	}
    
    	@Override
    	public void initialize(int width, int height, int parentWidth,
    			int parentHeight) {
    		super.initialize(width, height, parentWidth, parentHeight);
    		camera = new Camera();
    	}
    
    	@Override
    	protected void applyTransformation(float interpolatedTime, Transformation t) {
    		final float fromDegrees = this.fromDegrees;
    		float degrees = fromDegrees
    				+ ((toDegrees - fromDegrees) * interpolatedTime);
    		final float centerX = this.centerX;
    		final float centerY = this.centerY;
    		final Camera camera = this.camera;
    		final Matrix matrix = t.getMatrix();
    		camera.save();
    		if (reverse) {
    			camera.translate(0.0f, 0.0f, depthZ * interpolatedTime);
    		} else {
    			camera.translate(0.0f, 0.0f, depthZ * (1.0f - interpolatedTime));
    		}
    		camera.rotateY(degrees);
    		camera.getMatrix(matrix);
    		camera.restore();
    
    		matrix.preTranslate(-centerX, -centerY);
    		matrix.postTranslate(centerX, centerY);
    	}
    }
    

     

           有了这个动画类之后,就可以像调用android基本动画的方式来调用了,因为大家可以看到这个翻转动画是继承于Animation的。那具体该如何实现布局的翻转呢?首先你的布局代码是:

        <FrameLayout
            android:id="@id/main_fl"
            android:layout_width="214dp"
            android:layout_height="246dp"
            android:layout_centerInParent="true"
            android:orientation="vertical"
            android:visibility="invisible" >
    
            <include layout="@layout/zheng" />
    
            <include layout="@layout/fan" />
        </FrameLayout>

     
            一个正,一个反,剩下的你自己布局就行。

            剩下的在Activity里面的用法apidemos也给出了,大家只需要把一些布局替换成自己的就行了。好了,这个时候坑爹的来了,因为你会发现翻转过去的布局是倒着的,我被这个鬼东西折腾了好久,因为我发现apidemos里面的例子也是这样的,它的图片也是倒的。这让人情何以堪。于是试了许久终于解决了。首先我们定义一个记录正反的bool值

    private boolean nowZhengFan = true;// 默认当前是正面

     
    然后我们是点击布局来切换正反面的,所以将布局设置OnClickListener监听。然后在onClick方法里面写:

    case R.id.main_fl:
    if(nowZhengFan) {
    applyRotation(0, 0, 90);
    } else {
    applyRotation(-1, 360, 270);
    }
    break;

     

    private void applyRotation(int position, float start, float end) {
    		float centerX = mainFL.getWidth() / 2.0f;
    		float centerY = mainFL.getWidth() / 2.0f;
    		final Rotate3dAnimation animation = new Rotate3dAnimation(start, end,
    				centerX, centerY, 310.0f, true);
    		animation.setDuration(500);
    		animation.setFillAfter(false);
    		animation.setInterpolator(new AccelerateInterpolator());
    		animation.setAnimationListener(new DisplayNextView(position, true));
    		mainFL.startAnimation(animation);
    	}
    
    	private class DisplayNextView implements AnimationListener {
    
    		private int position;
    		private boolean b;
    		
    		public DisplayNextView(int pos,boolean b) {
    			this.b = b;
    			this.position = pos;
    		}
    		
    		@Override
    		public void onAnimationEnd(Animation animation) {
    			mainFL.post(new Swap(position));
    		}
    
    		@Override
    		public void onAnimationRepeat(Animation animation) {
    
    		}
    
    		@Override
    		public void onAnimationStart(Animation animation) {
    
    		}
    
    	}
    
    	private class Swap implements Runnable {
    
    		private int position;
    		
    		public Swap(int pos) {
    			this.position = pos;
    		}
    		@Override
    		public void run() {
    			float centerX = missionFL.getWidth() / 2.0f;
    			float centerY = missionFL.getWidth() / 2.0f;
    			Rotate3dAnimation rotation = null;
    			if(position > -1) {
    				rotation = new Rotate3dAnimation(270, 360, centerX, centerY, 310.0f, false);
    				zheng.setVisibility(View.GONE);
    				fan.setVisibility(View.VISIBLE);
    				nowZhengFan = false;
    			} else {
    				rotation = new Rotate3dAnimation(90, 0, centerX, centerY, 310.0f, false);
    				zheng.setVisibility(View.VISIBLE);
    				fan.setVisibility(View.GONE);
    				nowZhengFan = true;
    			}
    
    			rotation.setDuration(500);
    			rotation.setFillAfter(false);
    			rotation.setInterpolator(new DecelerateInterpolator());
    			mainFL.startAnimation(rotation);
    		}
    	}

     
    这里的关键是点击之后的第一次翻转是0--90度,然后调用swap进行第二次翻转,apidemos里面的是90-180度,但是这样就会导致布局是反的,于是要改成270-360度,这样就ok了。如果是翻回去,那么就是在点击之后是360-270度,这样就成功了。大家可以试试。

     

    展开全文
  • Android仿微信聊天界面布局

    千次阅读 2017-03-02 09:36:22
    Android开发中,很多时候都需要接入即时通信功能,那么就需要一个聊天的布局界面,下面就来给大家介绍一下,怎么布局聊天界面。  1.第一步首先是制作9.patch图片,这个Android  sdk 目录下tools文件,找到...

               在Android开发中,很多时候都需要接入即时通信功能,那么就需要一个聊天的布局界面,下面就来给大家介绍一下,怎么来布局聊天界面。

            1.第一步首先是制作9.patch图片,这个在Android  sdk 目录下tools文件,找到draw9patch.bat文件双击打开。这是一个专门用来处理安卓里面图像的小工具,你可以对图片指定拉伸的效果,具体教程可以百度,很简单的。

              2.编写主界面

    1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    2.     xmlns:tools="http://schemas.android.com/tools"  
    3.     android:layout_width="match_parent"  
    4.     android:layout_height="match_parent"  
    5.     android:background="#d8e0e8"   
    6.     android:orientation="vertical">  
    7.       
    8.     <ListView   
    9.         android:id="@+id/msg_list_view"  
    10.         android:layout_width="match_parent"  
    11.         android:layout_height="0dp"  
    12.         android:layout_weight="1"  
    13.         android:divider="#0000">  
    14.           
    15.     </ListView>  
    16.   
    17.       
    18.    <LinearLayout   
    19.        android:layout_width="match_parent"  
    20.        android:layout_height="wrap_content">  
    21.          
    22.        <EditText   
    23.            android:id="@+id/input_text"  
    24.            android:layout_width="0dp"  
    25.            android:layout_height="wrap_content"  
    26.            android:layout_weight="1"  
    27.            android:hint="Typ something in here"  
    28.            android:maxLines="2"/>  
    29.          
    30.        <Button   
    31.            android:id="@+id/send"  
    32.            android:layout_width="wrap_content"  
    33.            android:layout_height="wrap_content"  
    34.            android:text="send"/>  
    35.          
    36.     </LinearLayout>  
    37. </LinearLayout>  
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#d8e0e8" 
        android:orientation="vertical">
        
        <ListView 
            android:id="@+id/msg_list_view"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:divider="#0000">
            
        </ListView>
    
        
       <LinearLayout 
           android:layout_width="match_parent"
           android:layout_height="wrap_content">
           
           <EditText 
               android:id="@+id/input_text"
               android:layout_width="0dp"
               android:layout_height="wrap_content"
               android:layout_weight="1"
               android:hint="Typ something in here"
               android:maxLines="2"/>
           
           <Button 
               android:id="@+id/send"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:text="send"/>
           
        </LinearLayout>
    </LinearLayout>
    
    主界面里我们可以看到有一个ListView用于加载信息,线性布局进行嵌套,里层里有一个编辑框和一个按钮。下图就是布局初步效果图:

    3.编写ListView子项布局,新建一个布局文件

    1. <span style="font-size:12px;"><?xml version="1.0" encoding="utf-8"?>  
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    3.     android:layout_width="match_parent"  
    4.     android:layout_height="match_parent"  
    5.     android:orientation="vertical"   
    6.     android:padding="10dp">  
    7.       
    8.     <LinearLayout   
    9.         android:id="@+id/left_layout"  
    10.         android:layout_width="wrap_content"  
    11.         android:layout_height="wrap_content"  
    12.         android:layout_gravity="left"  
    13.         android:background="@drawable/message_left">  
    14.           
    15.         <TextView   
    16.             android:id="@+id/left_msg"  
    17.             android:layout_width="wrap_content"  
    18.             android:layout_height="wrap_content"  
    19.             android:gravity="center"  
    20.             android:layout_margin="10dp"  
    21.             android:textColor="#fff"/>  
    22.           
    23.     </LinearLayout>  
    24.   
    25.     <LinearLayout   
    26.         android:id="@+id/right_Layout"  
    27.         android:layout_width="wrap_content"  
    28.         android:layout_height="wrap_content"  
    29.         android:layout_gravity="right"  
    30.         android:background="@drawable/message_right"  
    31.         >  
    32.           
    33.         <TextView   
    34.             android:id="@+id/right_msg"  
    35.             android:layout_width="wrap_content"  
    36.             android:layout_height="wrap_content"  
    37.             android:layout_gravity="center"  
    38.             android:layout_margin="10dp"/>   
    39.           
    40.     </LinearLayout>  
    41. </LinearLayout></span>  
    <span style="font-size:12px;"><?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:padding="10dp">
        
        <LinearLayout 
            android:id="@+id/left_layout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="left"
            android:background="@drawable/message_left">
            
            <TextView 
                android:id="@+id/left_msg"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:layout_margin="10dp"
                android:textColor="#fff"/>
            
        </LinearLayout>
    
        <LinearLayout 
            android:id="@+id/right_Layout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="right"
            android:background="@drawable/message_right"
            >
            
            <TextView 
                android:id="@+id/right_msg"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_margin="10dp"/> 
            
        </LinearLayout>
    </LinearLayout></span>
    
           这里最外层是线性布局,里边嵌套两个线性布局。这两个布局分别是给消息发送界面和消息接收界面。后面可以通过设置布局的显示和隐藏属性来显示我们需要的消息。这也是最近学习布局收获的一点,光学课本上的单个布局的特点没有应用到实际的应用里边,很难自己想象原来布局可以这样灵活。

    效果图如下:

    3.完成MainActivity.Java,写好布局文件以后开始写代码,这里需要大概写的几点是:

    1.定义消息类的实体类Msg

    public class Msg{  }

    里面需要设置消息的类型:发送,接收,内容。

    2.ListView适配器的建立

    首先它需要继承ArrayAdapter,将泛型指定为Msg类。

    这里运用到了很多书上说的ListView的优化,通过if_else判断,如果convertView为空就重新初始化加载布局,这时就需要加载很多东西,如果convertView不为空时,说明它之前有缓存,可以重用,那我们直接调用它,就大大提高了运行的效率。

    还有通过创建ViewHolder这个内部类,可以对控件的实例进行缓存。当convertView为空时。将控件的实例存在ViewHolder里,调用setTag()方法,将ViewHolder对象存储在View里。当ViewHolder不为空时,调用View的setTag()方法,重新取出ViewHolder。这样就不用每次调用findViewById()方法获取控件。

    3.收发消息布局的隐藏和显示

    通过判断消息的类型,进行设置显示和隐藏消息。

    if(msg.getType()==Msg.RECEIVED){
                    //如果是收到的消息,则显示左边消息布局,将右边消息布局隐藏
                    viewHolder.leftLayout.setVisibility(View.VISIBLE);
                    viewHolder.rightLayout.setVisibility(View.GONE);
                    viewHolder.leftMsg.setText(msg.getContent());
                }else if(msg.getType()==Msg.SENT){
                    //如果是发出去的消息,显示右边布局的消息布局,将左边的消息布局隐藏
                    viewHolder.rightLayout.setVisibility(View.VISIBLE);
                    viewHolder.leftLayout.setVisibility(View.GONE);
                    viewHolder.rightMsg.setText(msg.getContent());
                }

    4.初始化消息initMsg()

    写几条消息测试一下首发消息是否正确。

    5.给按钮send设置监听器事件

    这里用到的是send.setOnClickListener(new OnClickListener(){   },这一看就是匿名内部类的方式。


    这里只是大体说了一下编写的大概内容,具体的可以看下面源代码:

    1. package com.example.chat_layout;  
    2.   
    3. import java.util.ArrayList;  
    4. import java.util.List;  
    5. import android.R.string;  
    6. import android.os.Bundle;  
    7. import android.app.Activity;  
    8. import android.content.Context;  
    9. import android.view.LayoutInflater;  
    10. import android.view.Menu;  
    11. import android.view.View;  
    12. import android.view.View.OnClickListener;  
    13. import android.view.ViewGroup;  
    14. import android.view.Window;  
    15. import android.widget.Adapter;  
    16. import android.widget.ArrayAdapter;  
    17. import android.widget.Button;  
    18. import android.widget.EditText;  
    19. import android.widget.LinearLayout;  
    20. import android.widget.ListView;  
    21. import android.widget.TextView;  
    22.   
    23. public class MainActivity extends Activity {  
    24.      /*
    25.    Created byYWHon 2017/2/26.
    26. */ 
    27.     private ListView msgListView;  
    28.       
    29.     private EditText inputText;  
    30.   
    31.     private Button send;  
    32.       
    33.     private MsgAdapter adapter;  
    34.       
    35.     private List<Msg> msgList = new ArrayList<Msg>();  
    36.       
    37.     @Override  
    38.     protected void onCreate(Bundle savedInstanceState) {  
    39.         super.onCreate(savedInstanceState);  
    40.         requestWindowFeature(Window.FEATURE_NO_TITLE);//设置窗口没有标题栏  
    41.         setContentView(R.layout.activity_main);  
    42.         initMsg();  
    43.         adapter = new MsgAdapter(MainActivity.this, R.layout.msg_item, msgList);  
    44.         inputText = (EditText) findViewById(R.id.input_text);  
    45.         send = (Button) findViewById(R.id.send);  
    46.         msgListView = (ListView) findViewById(R.id.msg_list_view);  
    47.         msgListView.setAdapter(adapter);  
    48.         send.setOnClickListener(new OnClickListener(){  
    49.   
    50.             @Override  
    51.             public void onClick(View v) {  
    52.                 String content = inputText.getText().toString();  
    53.                 if(!"".equals(content)){  
    54.                     Msg msg = new Msg(content, Msg.SENT);  
    55.                     msgList.add(msg);  
    56.                     adapter.notifyDataSetChanged();//有新消息时,刷新ListView中的显示  
    57.                     msgListView.setSelection(msgList.size());//将ListView定位到最后一行  
    58.                     inputText.setText("");//清空输入框的内容  
    59.                 }  
    60.             }  
    61.               
    62.         });  
    63.     }  
    64.   
    65.     private void initMsg() {  
    66.         Msg msg1 = new Msg("I miss you!",Msg.RECEIVED);  
    67.         msgList.add(msg1);  
    68.           
    69.         Msg msg2 = new Msg("I miss you,too!",Msg.SENT);  
    70.         msgList.add(msg2);  
    71.           
    72.         Msg msg3 = new Msg("I will come back soon!",Msg.RECEIVED);  
    73.         msgList.add(msg3);  
    74.           
    75.     }  
    76.   
    77.     @Override  
    78.     public boolean onCreateOptionsMenu(Menu menu) {  
    79.         // Inflate the menu; this adds items to the action bar if it is present.  
    80.         getMenuInflater().inflate(R.menu.main, menu);  
    81.         return true;  
    82.     }  
    83.       
    84.       
    85.       
    86.     public class Msg{  
    87.           
    88.         public static final int RECEIVED = 0;//收到一条消息  
    89.           
    90.         public static final int SENT = 1;//发出一条消息  
    91.           
    92.         private String  content;//消息的内容  
    93.           
    94.         private int type;//消息的类型  
    95.           
    96.         public  Msg(String content,int type){  
    97.             this.content = content;  
    98.             this.type = type;  
    99.         }  
    100.           
    101.         public String getContent(){  
    102.             return content;  
    103.         }  
    104.           
    105.         public int getType(){  
    106.             return type;  
    107.         }  
    108.     }  
    109.       
    110.     public class MsgAdapter extends ArrayAdapter<Msg>{  
    111.         private int resourceId;  
    112.   
    113.         public MsgAdapter(Context context, int textViewresourceId, List<Msg> objects) {  
    114.             super(context, textViewresourceId, objects);  
    115.             resourceId = textViewresourceId;  
    116.         }  
    117.           
    118.         @Override  
    119.         public View getView(int position, View convertView, ViewGroup parent) {  
    120.             Msg msg = getItem(position);  
    121.             View view;  
    122.             ViewHolder viewHolder;  
    123.               
    124.             if(convertView == null){  
    125.             view = LayoutInflater.from(getContext()).inflate(resourceId, null);  
    126.             viewHolder = new ViewHolder();  
    127.             viewHolder.leftLayout = (LinearLayout)view.findViewById(R.id.left_layout);  
    128.             viewHolder.rightLayout = (LinearLayout)view.findViewById(R.id.right_Layout);  
    129.             viewHolder.leftMsg = (TextView)view.findViewById(R.id.left_msg);  
    130.             viewHolder.rightMsg = (TextView)view.findViewById(R.id.right_msg);  
    131.             view.setTag(viewHolder);  
    132.             }else{  
    133.                 view = convertView;  
    134.                 viewHolder = (ViewHolder) view.getTag();  
    135.             }  
    136.               
    137.             if(msg.getType()==Msg.RECEIVED){  
    138.                 //如果是收到的消息,则显示左边消息布局,将右边消息布局隐藏  
    139.                 viewHolder.leftLayout.setVisibility(View.VISIBLE);  
    140.                 viewHolder.rightLayout.setVisibility(View.GONE);  
    141.                 viewHolder.leftMsg.setText(msg.getContent());  
    142.             }else if(msg.getType()==Msg.SENT){  
    143.                 //如果是发出去的消息,显示右边布局的消息布局,将左边的消息布局隐藏  
    144.                 viewHolder.rightLayout.setVisibility(View.VISIBLE);  
    145.                 viewHolder.leftLayout.setVisibility(View.GONE);  
    146.                 viewHolder.rightMsg.setText(msg.getContent());  
    147.             }  
    148.             return view;  
    149.         }  
    150.           
    151.         class ViewHolder{  
    152.             LinearLayout leftLayout;  
    153.             LinearLayout rightLayout;  
    154.             TextView leftMsg;  
    155.             TextView rightMsg;  
    156.         }  
    157.     }  
    158.       
    159. }  
    package com.example.chat_layout;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import android.R.string;
    import android.os.Bundle;
    import android.app.Activity;
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.Menu;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.ViewGroup;
    import android.view.Window;
    import android.widget.Adapter;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.LinearLayout;
    import android.widget.ListView;
    import android.widget.TextView;
    
    public class MainActivity extends Activity {
    	
    	private ListView msgListView;
    	
    	private EditText inputText;
    
    	private Button send;
    	
    	private MsgAdapter adapter;
    	
    	private List<Msg> msgList = new ArrayList<Msg>();
    	
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		requestWindowFeature(Window.FEATURE_NO_TITLE);//设置窗口没有标题栏
    		setContentView(R.layout.activity_main);
    		initMsg();
    		adapter = new MsgAdapter(MainActivity.this, R.layout.msg_item, msgList);
    		inputText = (EditText) findViewById(R.id.input_text);
    		send = (Button) findViewById(R.id.send);
    		msgListView = (ListView) findViewById(R.id.msg_list_view);
    		msgListView.setAdapter(adapter);
    		send.setOnClickListener(new OnClickListener(){
    
    			@Override
    			public void onClick(View v) {
    				String content = inputText.getText().toString();
    				if(!"".equals(content)){
    					Msg msg = new Msg(content, Msg.SENT);
    					msgList.add(msg);
    					adapter.notifyDataSetChanged();//有新消息时,刷新ListView中的显示
    					msgListView.setSelection(msgList.size());//将ListView定位到最后一行
    					inputText.setText("");//清空输入框的内容
    				}
    			}
    			
    		});
    	}
    
    	private void initMsg() {
    		Msg msg1 = new Msg("I miss you!",Msg.RECEIVED);
    		msgList.add(msg1);
    		
    		Msg msg2 = new Msg("I miss you,too!",Msg.SENT);
    		msgList.add(msg2);
    		
    		Msg msg3 = new Msg("I will come back soon!",Msg.RECEIVED);
    		msgList.add(msg3);
    		
    	}
    
    	@Override
    	public boolean onCreateOptionsMenu(Menu menu) {
    		// Inflate the menu; this adds items to the action bar if it is present.
    		getMenuInflater().inflate(R.menu.main, menu);
    		return true;
    	}
    	
    	
    	
    	public class Msg{
    		
    		public static final int RECEIVED = 0;//收到一条消息
    		
    		public static final int SENT = 1;//发出一条消息
    		
    		private String  content;//消息的内容
    		
    		private int type;//消息的类型
    		
    		public  Msg(String content,int type){
    			this.content = content;
    			this.type = type;
    		}
    		
    		public String getContent(){
    			return content;
    		}
    		
    		public int getType(){
    			return type;
    		}
    	}
    	
    	public class MsgAdapter extends ArrayAdapter<Msg>{
    		private int resourceId;
    
    		public MsgAdapter(Context context, int textViewresourceId, List<Msg> objects) {
    			super(context, textViewresourceId, objects);
    			resourceId = textViewresourceId;
    		}
    		
    		@Override
    		public View getView(int position, View convertView, ViewGroup parent) {
    			Msg msg = getItem(position);
    			View view;
    			ViewHolder viewHolder;
    			
    			if(convertView == null){
    			view = LayoutInflater.from(getContext()).inflate(resourceId, null);
    			viewHolder = new ViewHolder();
    			viewHolder.leftLayout = (LinearLayout)view.findViewById(R.id.left_layout);
    			viewHolder.rightLayout = (LinearLayout)view.findViewById(R.id.right_Layout);
    			viewHolder.leftMsg = (TextView)view.findViewById(R.id.left_msg);
    			viewHolder.rightMsg = (TextView)view.findViewById(R.id.right_msg);
    			view.setTag(viewHolder);
    			}else{
    				view = convertView;
    				viewHolder = (ViewHolder) view.getTag();
    			}
    			
    			if(msg.getType()==Msg.RECEIVED){
    				//如果是收到的消息,则显示左边消息布局,将右边消息布局隐藏
    				viewHolder.leftLayout.setVisibility(View.VISIBLE);
    				viewHolder.rightLayout.setVisibility(View.GONE);
    				viewHolder.leftMsg.setText(msg.getContent());
    			}else if(msg.getType()==Msg.SENT){
    				//如果是发出去的消息,显示右边布局的消息布局,将左边的消息布局隐藏
    				viewHolder.rightLayout.setVisibility(View.VISIBLE);
    				viewHolder.leftLayout.setVisibility(View.GONE);
    				viewHolder.rightMsg.setText(msg.getContent());
    			}
    			return view;
    		}
    		
    		class ViewHolder{
    			LinearLayout leftLayout;
    			LinearLayout rightLayout;
    			TextView leftMsg;
    			TextView rightMsg;
    		}
    	}
    	
    }
    
               最后效果图:可以看到除了程序中初始化的3条消息,ok这是通过底下编辑器输入的,看一看到实现了聊天对话框的基本内容和要求。




    展开全文
  • MATLAB出

    2021-05-18 20:39:38
    怎么让MATLAB出的更加美观 由于最近毕业论文的问题,涉及到MATLAB出网上没有找到特别好的帖子,自己也是试验了两天。找到了一套效果还不错的方法,下面上。 上面这就是MATLAB 直接出来的,平时仿真的...

    怎么让MATLAB出的图更加美观

    由于最近毕业论文的问题,涉及到MATLAB出图。在网上没有找到特别好的帖子,自己也是试验了两天。下面上图。
    在这里插入图片描述

    上面这就是MATLAB 直接出来的图,平时仿真的时候觉得没什么,不过一放到论文里是真的感觉难看啊。

    首先,我们来复习一下一张论文图像的基本要素。坐标轴,单位,适当的刻度以及图例。

    下面看一下成品,大概,就是这个样子。
    在这里插入图片描述

    1、图像基础设置

    点击view,里面会有最基础的设置,布局(如果有多个图像可以选择其分布的方式)与属性配置,风格,及图例。
    在这里插入图片描述
    在这里插入图片描述

    其中比较常用的是其中的display,可以在其中选择是否采用栅格,是否显示图例等。

    在这里插入图片描述
    在style中主要是设置图框的颜色,这边不做详细解释。
    在这里插入图片描述

    2、深入的修改

    想进行更进一步的修改就进入Figure
    在这里插入图片描述

    下一步进入坐标区属性
    在这里插入图片描述

    在下方的工具栏中,就能改变x,y轴的坐标与刻度,一般来说横坐标分为十格,纵坐标6-8格是较为合适的。这边也可以调整字体,坐标轴的字体推荐14,太小了放在论文中会看不清。
    在这里插入图片描述
    通过上方的工具栏也是可以实现调整的,也可以添加图例等。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wKhJACuC-1621341577024)(C:\Users\12204\AppData\Roaming\Typora\typora-user-images\image-20210518202451272.png)]
    但是你会发现不能修改图例的内容,而是只能添加图例的标题。
    在这里插入图片描述
    这时候就需要点击更多属性,找到String并修改其中的内容。
    在这里插入图片描述

    如果想调整图像的高宽比,可以点击坐标轴,进入更多属性,这两个position是图框的位置。中间的Ratio就是比例,可以使用0.618黄金比例,让图像看上去舒服一些。
    在这里插入图片描述
    接下来需要设置导出设置。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EJXCNUMh-1621341577030)(C:\Users\12204\AppData\Roaming\Typora\typora-user-images\image-20210518203241443.png)]
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PA5ddFpo-1621341577032)(C:\Users\12204\AppData\Roaming\Typora\typora-user-images\image-20210518203251963.png)]
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nn4iEpix-1621341577033)(C:\Users\12204\AppData\Roaming\Typora\typora-user-images\image-20210518203302435.png)]
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aMnaw0tX-1621341577034)(C:\Users\12204\AppData\Roaming\Typora\typora-user-images\image-20210518203313993.png)]
    上述的设置,结果就是本文开头的修改效果。

    3、出图

    点击导出之后会有很多可选的格式,推荐tif和svg。我一般都用TIFF no compression。最后再截到论文里。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PjyIpLsk-1621341577034)(C:\Users\12204\AppData\Roaming\Typora\typora-user-images\image-20210518203437985.png)]
    这次就先分享到这里,欢迎有问题与我交流。

    展开全文
  • 之前一直不知道怎么在里面添加代码,只能贴,现在终于找到了,不过有个用户体验不好的地方就是,我插入了代码之后我想修改怎么办,可能是我还不熟悉他强大的功能~我找不到~~~~~废话不多说,开始吧。首先将页面布局分...
  • 这个窗体的布局里面包含有一个TextView ,我想让这个悬浮框不断刷新显示时间改怎么做。 当我每次修改这个布局里面的TextView的时候,系统都说是空对象。请问怎么找到控件,![并改变其内容图片说明]...
  • 要我实现这样一个功能:要实现的是验证码文本框变窄一点,然后右边加入一副验证码图片,并且响应式布局的情况下移动端访问的时候验证码图片能保持和验证码文本框同一行,这个怎么做?难为了半天,后来找到了...
  • 本人琢磨了很久怎么去吧EditText的下划线和hint值被选中后的颜色改成自己想要的,在布局页面设置中也没有找到对应的属性,一个一个属性都试了一遍,最终看到那个紫红色想到res中style里面有个颜色跟这个颜色一样,就...
  • - 找到布局文件activity gallery.xml中发现是一个命名GLRootView的自定义控件 - 因为不同页及黑条都同一个控件内,所以应该不是activity中代码实现,直接定位到GLRootView,继承自GLSurfaceView - 看了下构造函数...
  • 有很多情况下,我们只要运用好Android给我提供好的控件,经过布局巧妙的结合一起,就是一个新的控件,我称之为“自定义组合控件”。 那么,这种自定义组合控件...从上面的来分析,我们可以看到,这个布局里面是没
  • Android防止启动页面闪白问题

    千次阅读 2017-07-31 19:38:09
    一般应用都是有启动页面的 ... 为什么会出现这个问题呢,一般是把启动页背景放在xml布局里面写定 解决思路:启动页背景图在其他地方写 方案:AndroidManifest找到启动页的Activity,设置style 代码:
  • MFC应用登录框的实现(VS2019)

    千次阅读 热门讨论 2020-06-12 12:38:45
    对话框的使用有了一定的了解后 就可以来实现一下登录框的应用...然后左侧的工具箱里面找到插件进行布局; 我的登录界面给布局成这样; 然后呢,关键的一点,在上右键,选择添加类; 起好名字确定就可以了; 下一
  • onCreate里面获取SharedPreferences对象,这里的语法有点奇怪,我什么都没有呢就进行get,但是Android 就是这么规定的。下面这句代码相当于声明了一个小型数据库,名为login_info,模式是私有模式,应该是会对数据...
  • LayoutManagerDemo ...哪里找到我: 我的github: https://github.com/mcxtzhang 我的CSDN博客: http://blog.csdn.net/zxt0601 我的稀土掘金: http://gold.xitu.io/user/56de210b816dfa0052e66495 我的简书: ...
  • 易捷PDF转换成Word转换器官方免费版操作界面简单易用,很容易就可以上手,几步就可以搞定PDF转换,加上软件体积小巧、绿色好用,对于苦苦寻找PDF怎么转Word,如何将PDF转换成Word方法的朋友来说,是一款不可多得的...
  • Quartus_II使用教程

    热门讨论 2012-11-26 23:20:43
    功能键,当然也可以view里面选择,如15. 15 将一些类似的信号进行合并,一起选中后右击,点选group,进行合并或者拆分。对 一些信号合并的时候,个人使用Quartus有个小瑕疵,不能命名为SW R1 R2 R3 ...
  • APKTool批处理版l

    2011-10-26 13:58:55
    第二种方法,就res目录里面建立对应的语言资源文件夹(简体中文资源的目录名是values-zh-rCN,繁体中文是values-zh-rTW),将英文资源values里面的arrays.xml和strings.xml复制到新目录里面进行汉化,让Android...
  • 目前新建布局文件的时候,ResourceTable一定找不到你的布局文件和id,此时需要重启编译器,每新建一个布局文件,就需要重启编译器才能找到布局文件对应的id。 ✅不是说鸿蒙支持的是ES5.1吗,怎么还能用ES6的语法...
  • 技巧,思考一下作者是怎么找到关键入口的,核心的实现什么地方。 要善于思考,要多问为什么,面对一个模块,你要去思考这个模块解决了什么问题,这个问题的本质是什么,为什么这么解决,如果让我来写,我会怎么...
  • 12.我们右边的器件栏里找到Label 标签器件 13.按着鼠标左键将其拖到设计窗口上,如下。 14.我们双击它,并将其内容改为helloworld。 15.我们右下角的属性栏里将字体大小由9 改为15。 16.我们拖动标签一角的...
  • 启动 MonoDevelop , Tools 菜单下找到点击 “Open AVD Manager” , 将会启动 “Android Virtual Device Manager”, 创建一个新的 Android 虚拟设备, Name 为 Droid4.1, Target 选择 4.1, SD 卡选择 256, ...
  • 那么,问题就来了,我书籍里面的文档越来越多,我怎么知道我要链接的那个文档的文档标识呢?不用担心,markdown编辑器的左侧,括号里面的红色文字显示的就是你的文档标识。 采集功能 看到一篇很好的文章,但是...
  • 第一个问题是fixed的trie7中不能进行定位,而且td定位后并不能保持表格中的布局,这样在原表格插tr就没意义了。 ps:fixed的相关应用可参考仿LightBox效果。 最后我用的方法是新建一个table,并把源tr克隆到...

空空如也

空空如也

1 2
收藏数 30
精华内容 12
关键字:

怎么在布局里面找到图